iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >Doris 功能介绍-查询分析
  • 797
分享到

Doris 功能介绍-查询分析

Doris功能介绍-查询分析 2015-12-30 18:12:40 797人浏览 无得
摘要

Doris 功能介绍-查询分析

## 查询分析

在 0.14 版本中,Doris 提供了一个图形化的命令以帮助用户更方便的分析一个具体的查询或导入。本文介绍如何使用该功能来分析一个查询
> 该功能需升级至0.14.7版本。

 

### 查询计划树

sql 是一个描述性语言,用户通过一个 SQL 来描述想获取的数据。而一个 SQL 的具体执行方式依赖于数据库的实现。而查询规划器就是用来决定数据库如何具体执行一个 SQL 的。
比如用户指定了一个 Join 算子,则查询规划器需要决定具体的 Join 算法,比如是 Hash Join,还是 Merge Sort Join;是使用 Shuffle 还是 Broadcast;Join 顺序是否需要调整以避免笛卡尔积;以及确定最终的在哪些节点执行等等。

Doris 的查询规划过程是先将一个 SQL 语句转换成一个单机执行计划树。

之后,查询规划器会根据具体的算子执行方式、数据的具体分布,将单机查询计划转换为分布式查询计划。分布式查询计划是由多个 Fragment 组成的,每个 Fragment 负责查询计划的一部分,各个 Fragment 直接会通过 Exchangenode 算子进行数据的传输。

如上图,我们将单机计划分成了两个 Fragment:F1 和 F2。两个 Fragment 之间通过一个 ExchangeNode 节点传输数据。

而一个 Fragment 会进一步的划分为多个 Instance。Instance 是最终具体的执行实例。划分成多个 Instance 有助于充分利用机器资源,提升一个 Fragment 的执行并发度。 

 

### 查看查询计划

可以通过以下两种命令查看一个 SQL 的执行计划。

* EXPLaiN GRAPH select ...;

* EXPLAIN select ...;
其中第一个命令以图形化的方式展示一个查询计划,这个命令可以比较直观的展示查询计划的树形结构,以及 Fragment 的划分情况:

mysql> desc graph select tbl1.k1, sum(tbl1.k2) from tbl1 join tbl2 on tbl1.k1 = tbl2.k1 group by tbl1.k1 order by tbl1.k1;
+---------------------------------------------------------------------------------------------------------------------------------+
| Explain String                                                                                                                  |
+---------------------------------------------------------------------------------------------------------------------------------+
|                                                                                                                                 |
|              ┌---------------┐                                                                                                  |
|              │[9: ResultSink]│                                                                                                  |
|              │[Fragment: 4]  │                                                                                                  |
|              │RESULT SINK    │                                                                                                  |
|              └---------------┘                                                                                                  |
|                      │                                                                                                          |
|           ┌---------------------┐                                                                                               |
|           │[9: MERGING-EXCHANGE]│                                                                                               |
|           │[Fragment: 4]        │                                                                                               |
|           └---------------------┘                                                                                               |
|                      │                                                                                                          |
|            ┌-------------------┐                                                                                                |
|            │[9: DataStreamSink]│                                                                                                |
|            │[Fragment: 3]      │                                                                                                |
|            │STREAM DATA SINK   │                                                                                                |
|            │  EXCHANGE ID: 09  │                                                                                                |
|            │  UNPARTITioNED    │                                                                                                |
|            └-------------------┘                                                                                                |
|                      │                                                                                                          |
|               ┌-------------┐                                                                                                   |
|               │[4: TOP-N]   │                                                                                                   |
|               │[Fragment: 3]│                                                                                                   |
|               └-------------┘                                                                                                   |
|                      │                                                                                                          |
|      ┌-------------------------------┐                                                                                          |
|      │[8: AGGREGATE (merge finalize)]│                                                                                          |
|      │[Fragment: 3]                  │                                                                                          |
|      └-------------------------------┘                                                                                          |
|                      │                                                                                                          |
|               ┌-------------┐                                                                                                   |
|               │[7: EXCHANGE]│                                                                                                   |
|               │[Fragment: 3]│                                                                                                   |
|               └-------------┘                                                                                                   |
|                      │                                                                                                          |
|            ┌-------------------┐                                                                                                |
|            │[7: DataStreamSink]│                                                                                                |
|            │[Fragment: 2]      │                                                                                                |
|            │STREAM DATA SINK   │                                                                                                |
|            │  EXCHANGE ID: 07  │                                                                                                |
|            │  HASH_PARTITIONED │                                                                                                |
|            └-------------------┘                                                                                                |
|                      │                                                                                                          |
|     ┌---------------------------------┐                                                                                         |
|     │[3: AGGREGATE (update serialize)]│                                                                                         |
|     │[Fragment: 2]                    │                                                                                         |
|     │STREAMING                        │                                                                                         |
|     └---------------------------------┘                                                                                         |
|                      │                                                                                                          |
|     ┌---------------------------------┐                                                                                         |
|     │[2: HASH JOIN]                   │                                                                                         |
|     │[Fragment: 2]                    │                                                                                         |
|     │join op: INNER JOIN (PARTITIONED)│                                                                                         |
|     └---------------------------------┘                                                                                         |
|           ┌----------┴----------┐                                                                                               |
|    ┌-------------┐       ┌-------------┐                                                                                        |
|    │[5: EXCHANGE]│       │[6: EXCHANGE]│                                                                                        |
|    │[Fragment: 2]│       │[Fragment: 2]│                                                                                        |
|    └-------------┘       └-------------┘                                                                                        |
|           │                     │                                                                                               |
| ┌-------------------┐ ┌-------------------┐                                                                                     |
| │[5: DataStreamSink]│ │[6: DataStreamSink]│                                                                                     |
| │[Fragment: 0]      │ │[Fragment: 1]      │                                                                                     |
| │STREAM DATA SINK   │ │STREAM DATA SINK   │                                                                                     |
| │  EXCHANGE ID: 05  │ │  EXCHANGE ID: 06  │                                                                                     |
| │  HASH_PARTITIONED │ │  HASH_PARTITIONED │                                                                                     |
| └-------------------┘ └-------------------┘                                                                                     |
|           │                     │                                                                                               |
|  ┌-----------------┐   ┌-----------------┐                                                                                      |
|  │[0: OlapScanNode]│   │[1: OlapScanNode]│                                                                                      |
|  │[Fragment: 0]    │   │[Fragment: 1]    │                                                                                      |
|  │TABLE: tbl1      │   │TABLE: tbl2      │                                                                                      |
|  └-----------------┘   └-----------------┘                                                                                      |
+----------------------------------------------------------------------

 

从图中可以看出,查询计划树被分为了5个 Fragment:0、1、2、3、4。如 `OlapScanNode` 节点上的 `[Fragment: 0]` 表示这个节点属于 Fragment 0。每个Fragment之间都通过 DataStreamSink 和 ExchangeNode 进行数据传输。

图形命令仅展示简化后的节点信息,如果需要查看更具体的节点信息,如下推到节点上的过滤条件等,则需要通过第二个命令查看更详细的文字版信息:

mysql> explain select tbl1.k1, sum(tbl1.k2) from tbl1 join tbl2 on tbl1.k1 = tbl2.k1 group by tbl1.k1 order by tbl1.k1;
+----------------------------------------------------------------------------------+
| Explain String                                                                   |
+----------------------------------------------------------------------------------+
| PLAN FRAGMENT 0                                                                  |
|  OUTPUT EXPRS:  `tbl1`.`k1` |   sum(`tbl1`.`k2`) |
|   PARTITION: UNPARTITIONED                                                       |
|                                                                                  |
|   RESULT SINK                                                                    |
|                                                                                  |
|   9:MERGING-EXCHANGE                                                             |
|      limit: 65535                                                                |
|                                                                                  |
| PLAN FRAGMENT 1                                                                  |
|  OUTPUT EXPRS:                                                                   |
|   PARTITION: HASH_PARTITIONED:  `tbl1`.`k1`                              |
|                                                                                  |
|   STREAM DATA SINK                                                               |
|     EXCHANGE ID: 09                                                              |
|     UNPARTITIONED                                                                |
|                                                                                  |
|   4:TOP-N                                                                        |
|   |  order by:   `tbl1`.`k1` ASC                                 |
|   |  offset: 0                                                                   |
|   |  limit: 65535                                                                |
|   |                                                                              |
|   8:AGGREGATE (merge finalize)                                                   |
|   |  output: sum( sum(`tbl1`.`k2`))                                      |
|   |  group by:  `tbl1`.`k1`                                              |
|   |  cardinality=-1                                                              |
|   |                                                                              |
|   7:EXCHANGE                                                                     |
|                                                                                  |
| PLAN FRAGMENT 2                                                                  |
|  OUTPUT EXPRS:                                                                   |
|   PARTITION: HASH_PARTITIONED: `tbl1`.`k1`                                       |
|                                                                                  |
|   STREAM DATA SINK                                                               |
|     EXCHANGE ID: 07                                                              |
|     HASH_PARTITIONED:  `tbl1`.`k1`                                       |
|                                                                                  |
|   3:AGGREGATE (update serialize)                                                 |
|   |  STREAMING                                                                   |
|   |  output: sum(`tbl1`.`k2`)                                                    |
|   |  group by: `tbl1`.`k1`                                                       |
|   |  cardinality=-1                                                              |
|   |                                                                              |
|   2:HASH JOIN                                                                    |
|   |  join op: INNER JOIN (PARTITIONED)                                           |
|   |  runtime filter: false                                                       |
|   |  hash predicates:                                                            |
|   |  colocate: false, reason: table not in the same group                        |
|   |  equal join conjunct: `tbl1`.`k1` = `tbl2`.`k1`                              |
|   |  cardinality=2                                                               |
|   |                                                                              |
|   |----6:EXCHANGE                                                                |
|   |                                                                              |
|   5:EXCHANGE                                                                     |
|                                                                                  |
| PLAN FRAGMENT 3                                                                  |
|  OUTPUT EXPRS:                                                                   |
|   PARTITION: RANDOM                                                              |
|                                                                                  |
|   STREAM DATA SINK                                                               |
|     EXCHANGE ID: 06                                                              |
|     HASH_PARTITIONED: `tbl2`.`k1`                                                |
|                                                                                  |
|   1:OlapScanNode                                                                 |
|      TABLE: tbl2                                                                 |
|      PREAGGREGATION: ON                                                          |
|      partitions=1/1                                                              |
|      rollup: tbl2                                                                |
|      tabletRatio=3/3                                                             |
|      tabletList=105104776,105104780,105104784                                    |
|      cardinality=1                                                               |
|      avgRowSize=4.0                                                              |
|      numNodes=6                                                                  |
|                                                                                  |
| PLAN FRAGMENT 4                                                                  |
|  OUTPUT EXPRS:                                                                   |
|   PARTITION: RANDOM                                                              |
|                                                                                  |
|   STREAM DATA SINK                                                               |
|     EXCHANGE ID: 05                                                              |
|     HASH_PARTITIONED: `tbl1`.`k1`                                                |
|                                                                                  |
|   0:OlapScanNode                                                                 |
|      TABLE: tbl1                                                                 |
|      PREAGGREGATION: ON                                                          |
|      partitions=1/1                                                              |
|      rollup: tbl1                                                                |
|      tabletRatio=3/3                                                             |
|      tabletList=105104752,105104763,105104767                                    |
|      cardinality=2                                                               |
|      avgRowSize=8.0                                                              |
|      numNodes=6                                                                  |
+----------------------------------------------------------------------------------+

 

> 查询计划中显示的信息还在不断规范和完善中,我们将在后续的文章中详细介绍。

 


### 查看查询 Profile

用户可以通过以下命令打开会话变量 `is_report_success`:

`SET is_report_success=true;`

然后执行查询,则 Doris 会产生该查询的一个 Profile。Profile 包含了一个查询各个节点的具体执行情况,有助于我们分析查询瓶颈。

执行完查询后,我们可以通过如下命令先获取 Profile 列表:

 

​mysql> show query profile "/"G
*************************** 1. row ***************************
   QueryId: c257c52f93e149ee-ace8ac14e8c9fef9
      User: root
 DefaultDb: default_cluster:db1
       SQL: select tbl1.k1, sum(tbl1.k2) from tbl1 join tbl2 on tbl1.k1 = tbl2.k1 group by tbl1.k1 order by tbl1.k1
 QueryType: Query
 StartTime: 2021-04-08 11:30:50
   EndTime: 2021-04-08 11:30:50
 TotalTime: 9ms
QueryState: EOF

 

这个命令会列出当前保存的所有 Profile。每行对应一个查询。我们可以选择我们想看的 Profile 对应的 QueryId,查看具体情况。

查看一个Profile分为3个步骤:

1. 查看整体执行计划树

    这一步主要用于从整体分析执行计划,并查看每个Fragment的执行耗时。

mysql> show query profile "/c257c52f93e149ee-ace8ac14e8c9fef9"G
*************************** 1. row ***************************
Fragments:
             ┌----------------------┐
             │[-1: DataBufferSender]│
             │Fragment: 0           │
             │MaxActiveTime: 6.626ms│
             └----------------------┘
                         │
               ┌------------------┐
               │[9: EXCHANGE_NODE]│
               │Fragment: 0       │
               └------------------┘
                         │
             ┌----------------------┐
             │[9: DataStreamSender] │
             │Fragment: 1           │
             │MaxActiveTime: 5.449ms│
             └----------------------┘
                         │
                 ┌--------------┐
                 │[4: SORT_NODE]│
                 │Fragment: 1   │
                 └--------------┘
                        ┌┘
             ┌---------------------┐
             │[8: AGGREGATION_NODE]│
             │Fragment: 1          │
             └---------------------┘
                        └┐
               ┌------------------┐
               │[7: EXCHANGE_NODE]│
               │Fragment: 1       │
               └------------------┘
                         │
             ┌----------------------┐
             │[7: DataStreamSender] │
             │Fragment: 2           │
             │MaxActiveTime: 3.505ms│
             └----------------------┘
                        ┌┘
             ┌---------------------┐
             │[3: AGGREGATION_NODE]│
             │Fragment: 2          │
             └---------------------┘
                        │
              ┌-------------------┐
              │[2: HASH_JOIN_NODE]│
              │Fragment: 2        │
              └-------------------┘
           ┌------------┴------------┐
 ┌------------------┐      ┌------------------┐
 │[5: EXCHANGE_NODE]│      │[6: EXCHANGE_NODE]│
 │Fragment: 2       │      │Fragment: 2       │
 └------------------┘      └------------------┘
           │                         │
┌---------------------┐ ┌------------------------┐
│[5: DataStreamSender]│ │[6: DataStreamSender]   │
│Fragment: 4          │ │Fragment: 3             │
│MaxActiveTime: 1.87ms│ │MaxActiveTime: 636.767us│
└---------------------┘ └------------------------┘
           │                        ┌┘
 ┌-------------------┐    ┌-------------------┐
 │[0: OLAP_SCAN_NODE]│    │[1: OLAP_SCAN_NODE]│
 │Fragment: 4        │    │Fragment: 3        │
 └-------------------┘    └-------------------┘
           │                        │
    ┌-------------┐          ┌-------------┐
    │[OlapScanner]│          │[OlapScanner]│
    │Fragment: 4  │          │Fragment: 3  │
    └-------------┘          └-------------┘
           │                        │
  ┌-----------------┐      ┌-----------------┐
  │[SegmentIterator]│      │[SegmentIterator]│
  │Fragment: 4      │      │Fragment: 3      │
  └-----------------┘      └-----------------┘

 

如上图,每个节点都标注了自己所属的 Fragment,并且在每个 Fragment 的 Sender节点,标注了该 Fragment 的执行耗时(MaxActiveTime)。这个耗时,是Fragment下所有 Instance 执行耗时中最长的一个。这个有助于我们从整体角度发现最耗时的 Fragment。

2. 查看具体 Fragment 下的 Instance 列表

    比如我们发现 Fragment 1 耗时最长,则可以继续查看 Fragment 1 的 Instance 列表:

mysql> show query profile "/c257c52f93e149ee-ace8ac14e8c9fef9/1";
+-----------------------------------+-------------------+------------+
| Instances                         | Host              | ActiveTime |
+-----------------------------------+-------------------+------------+
| c257c52f93e149ee-ace8ac14e8c9ff03 | 10.200.00.01:9060 | 5.449ms    |
| c257c52f93e149ee-ace8ac14e8c9ff05 | 10.200.00.02:9060 | 5.367ms    |
| c257c52f93e149ee-ace8ac14e8c9ff04 | 10.200.00.03:9060 | 5.358ms    |
+-----------------------------------+-------------------+------------+

这里展示了 Fragment 1 上所有的 3 个 Instance 所在的执行节点和耗时。

3. 查看具体 Instance

    我们可以继续查看某一个具体的 Instance 上各个算子的详细 Profile:

mysql> show query profile "/c257c52f93e149ee-ace8ac14e8c9fef9/1/c257c52f93e149ee-ace8ac14e8c9ff03"G
*************************** 1. row ***************************
Instance:
 ┌---------------------------------------┐
 │[9: DataStreamSender]                  │
 │(Active: 37.222us, non-child: 0.40)    │
 │  - Counters:                          │
 │      - BytesSent: 0.00                │
 │      - IgnoreRows: 0                  │
 │      - OverallThroughput: 0.0 /sec    │
 │      - PeakMemoryUsage: 8.00 KB       │
 │      - SerializeBatchTime: 0ns        │
 │      - UncompressedRowBatchSize: 0.00 │
 └---------------------------------------┘
                     └┐
                      │
    ┌----------------------------------┐
    │[4: SORT_NODE]                    │
    │(Active: 5.421ms, non-child: 0.71)│
    │  - Counters:                     │
    │      - PeakMemoryUsage: 12.00 KB │
    │      - RowsReturned: 0           │
    │      - RowsReturnedRate: 0       │
    └----------------------------------┘
                     ┌┘
                     │
   ┌-----------------------------------┐
   │[8: AGGREGATION_NODE]              │
   │(Active: 5.355ms, non-child: 10.68)│
   │  - Counters:                      │
   │      - BuildTime: 3.701us         │
   │      - GetResultsTime: 0ns        │
   │      - HTResize: 0                │
   │      - HTResizeTime: 1.211us      │
   │      - HashBuckets: 0             │
   │      - HashCollisions: 0          │
   │      - HashFailedProbe: 0         │
   │      - HashFilledBuckets: 0       │
   │      - HashProbe: 0               │
   │      - HashTravelLength: 0        │
   │      - LargestPartitionPercent: 0 │
   │      - MaxPartitionLevel: 0       │
   │      - NumRepartitions: 0         │
   │      - PartitionsCreated: 16      │
   │      - PeakMemoryUsage: 34.02 MB  │
   │      - RowsProcessed: 0           │
   │      - RowsRepartitioned: 0       │
   │      - RowsReturned: 0            │
   │      - RowsReturnedRate: 0        │
   │      - SpilledPartitions: 0       │
   └-----------------------------------┘
                     └┐
                      │
┌------------------------------------------┐
│[7: EXCHANGE_NODE]                        │
│(Active: 4.360ms, non-child: 46.84)       │
│  - Counters:                             │
│      - BytesReceived: 0.00               │
│      - ConvertRowBatchTime: 387ns        │
│      - DataArrivalWaitTime: 4.357ms      │
│      - DeserializeRowBatchTimer: 0ns     │
│      - FirstBatchArrivalWaitTime: 4.356ms│
│      - PeakMemoryUsage: 0.00             │
│      - RowsReturned: 0                   │
│      - RowsReturnedRate: 0               │
│      - SendersBlockedTotalTimer(*): 0ns  │
└------------------------------------------┘

    上图展示了 Fragment 1 中,Instance c257c52f93e149ee-ace8ac14e8c9ff03 的各个算子的具体 Profile。

    通过以上3个步骤,我们可以逐步排查一个SQL的性能瓶颈。

 

END

 

 > 关于 Profile 中各个参数的具体说明,我们还在不断完善和修改中,会在后续的文章中详细说明。

 

欢迎扫码关注:


 

Apache Doris(incubating)官方公众号

相关链接:


Apache Doris官方网站:

Http://doris.incubator.apache.org

Apache Doris GitHub

https://github.com/apache/incubator-doris

Baidu Doris 官方网站:

https://doris.baidu.com

Baidu Doris Github:

https://github.com/apache/incubator-doris

Apache Doris 开发者邮件组:


dev@doris.apache.org

您可能感兴趣的文档:

--结束END--

本文标题: Doris 功能介绍-查询分析

本文链接: https://www.lsjlt.com/news/8218.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • mysql慢查询功能详细介绍
    这篇文章主要讲解了“mysql慢查询功能详细介绍”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“mysql慢查询功能详细介绍”吧!开启mysql慢查询日志1....
    99+
    2024-04-02
  • windows7功能介绍
    Windows 7 是 Microsoft 公司开发的一款操作系统。它在 Windows Vista 的基础上进行了许多改进,提供了...
    99+
    2023-09-22
    Windows
  • MySqlnion与Limit查询介绍
    目录1. union合并查询结果集2. limit分页查询1. union合并查询结果集 查询工作岗位是 MANAGER 和 SALESMAN 的员工? mysq...
    99+
    2024-04-02
  • SQL结构化查询语言分类介绍
    SQL结构化查询语言分类介绍SQL:结构化查询语言,它是一种对关系型数据进行定义和操作的语言方法。SQL结构化查询语言包含6个部分:一、数据查询语言(DQL)DQL全称Data Query Language...
    99+
    2024-04-02
  • mysql的查询方法介绍
    本篇内容主要讲解“mysql的查询方法介绍”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“mysql的查询方法介绍”吧!  本文主要介绍的是MySQL慢查询分析方...
    99+
    2024-04-02
  • CentOS 7.1功能介绍
    这篇文章主要介绍“CentOS 7.1功能介绍”,在日常操作中,相信很多人在CentOS 7.1功能介绍问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”CentOS 7.1功能介绍”的疑惑有所帮助!接下来,请跟...
    99+
    2023-06-10
  • 性能分析之MySQL慢查询日志分析(慢查询日志)
    一、背景            MySQL的慢查询日志是MySQL提供的一种日志记录,他用来记录在MySQL中响应的时间超过阈值的语句,具体指运行时间超过long_query_time(默认是10秒)值的SQL,会被记录到慢查询日志中。  ...
    99+
    2023-10-20
    mysql 数据库 慢日志分析 性能优化 慢查询日志
  • Java实现分页查询功能
    分页查询 分页查询将数据库中庞大的数据分段显示,每页显示用户自定义的行数,提高用户体验度,最主要的是如果一次性从服务器磁盘中读出全部数据到内存,有内存溢出的风险 真假分页 假分页: ...
    99+
    2024-04-02
  • Xcode 8新功能介绍
    Xcode 8是苹果公司最新发布的一款集成开发环境(IDE),主要用于开发iOS、macOS、watchOS和tvOS应用程序。以下...
    99+
    2023-09-28
    Xcode
  • Kubernetes1.5的新功能介绍
    本篇内容介绍了“Kubernetes1.5的新功能介绍”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!主题简介StatefulSets (原名...
    99+
    2023-06-05
  • CORNERSTONE产品功能介绍
    CORNERSTONE作为新一代智能项目管理平台,专注于产品研发项目管理,致力于帮助企业全方位解决团队协作与研发痛点,内嵌精益/敏捷/DevOps方法论,让企业能快速响应市场变化和客户需求,同时还具备成熟的立体化智能数据分析系统,可自动生成...
    99+
    2023-06-04
  • php数据库的包含查询功能源码分析
    这篇文章主要介绍了php数据库的包含查询功能源码分析的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇php数据库的包含查询功能源码分析文章都会有所收获,下面我们一起来看看吧。在开发web应用程序的过程中,数据库查...
    99+
    2023-07-05
  • mysql查询控制语句的介绍
    这篇文章主要讲解了“mysql查询控制语句的介绍”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“mysql查询控制语句的介绍”吧!mysql查询的控制语句字段去重**关键字:distinct*...
    99+
    2023-06-14
  • MybatisPlus特殊查询的实现介绍
    目录一.查询投影二.聚合查询三.分组查询四.查询条件4.1 等值查询4.2 范围查询4.3 模糊查询4.4 排序查询一.查询投影 查询投影又称查询指定字段 @Test void te...
    99+
    2022-11-13
    MybatisPlus特殊查询 MybatisPlus查询
  • MybatisPlus分页查询与多条件查询介绍及查询过程中空值问题的解决
    目录前言一.分页处理1.调用方法传入参数获取返回值2.设置分页拦截器二.条件查询2.1通过QueryWrapper对象来执行分页查询2.2在QueryWrapper对象的基础上使用l...
    99+
    2022-11-13
    MybatisPlus分页查询 MybatisPlus多条件查询 MybatisPlus null
  • mysql和mssql以及oracle的分页查询方法介绍
    本篇内容介绍了“mysql和mssql以及oracle的分页查询方法介绍”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能...
    99+
    2024-04-02
  • Oracleuserenv()函数介绍分析
    Oracle的用户环境(User Environment)是指数据库会话的各种设定和属性。Oracle提供了一个名为USERENV的...
    99+
    2023-09-14
    函数
  • PHP JSON互转函数性能介绍分析
    本篇文章给大家分享的是有关PHP JSON互转函数性能介绍分析,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。PHP语言被业内人士评为性能强大的一款计算机语言,许多程序员都采用它...
    99+
    2023-06-17
  • JavaScript中super的功能介绍
    本篇内容主要讲解“JavaScript中super的功能介绍”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JavaScript中super的功能介绍”吧!首先在...
    99+
    2024-04-02
  • 亚马逊API功能介绍
    1. 什么是亚马逊API? 亚马逊API(Application Programming Interface)是亚马逊提供的一组工具和接口,允许开发者通过编程方式与亚马逊的产品和服务进行交互。通过使用亚马逊API,开发者可以访问亚马逊的商...
    99+
    2023-10-27
    亚马逊 功能 API
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作