云数据库 GAUSSDB-详解:执行计划
执行计划
以如下SQL语句为例:
1
|
SELECT * FROM t1, t2 WHERE t1.c1 = t2.c2; |
执行EXPLAIN的输出为:
执行计划层级解读(纵向):
- 第一层:Seq Scan on t2
表扫描算子,用Seq Scan的方式扫描表t2。这一层的作用是把表t2的数据从buffer或者磁盘上读上来输送给上层节点参与计算。
- 第二层:Hash
- 第三层:Seq Scan on t1
表扫描算子,用Seq Scan的方式扫描表t1。这一层的作用是把表t1的数据从buffer或者磁盘上读上来输送给上层节点参与hash join计算。
- 第四层:Hash Join
执行计划中的主要关键字说明:
- 表访问方式
- Seq Scan
- Index Scan
优化器决定使用两步的规划:最底层的规划节点访问一个索引,找出匹配索引条件的行的位置,然后上层规划节点真实地从表中抓取出那些行。独立地抓取数据行比顺序地读取它们的开销高很多,但是因为并非所有表的页面都被访问了,这么做实际上仍然比一次顺序扫描开销要少。使用两层规划的原因是,上层规划节点在读取索引标识出来的行位置之前,会先将它们按照物理位置排序,这样可以最小化独立抓取的开销。
如果在WHERE里面使用的好几个字段上都有索引,那么优化器可能会使用索引的AND或OR的组合。但是这么做要求访问两个索引,因此与只使用一个索引,而把另外一个条件只当作过滤器相比,这个方法未必是更优。
根据索引排序机制的差异,索引扫描可以分为以下几类。
- Bitmap Heap Scan
- TID Scan
- Index Ctid Scan
- CTE Scan
- Foreign Scan
- Function Scan
- Sample Scan
- Subquery Scan
- Values Scan
- WorkTable Scan
- CS tore Index Ctid Scan
- CStore Index Heap Scan
- 表连接方式
- Nested Loop
嵌套循环,适用于被连接的数据子集较小的查询。在嵌套循环中,外表驱动内表,外表返回的每一行都要在内表中检索找到它匹配的行,因此整个查询返回的结果集不能太大(不能大于10000),要把返回子集较小的表作为外表,而且在内表的连接字段上建议要有索引。
- (Sonic) Hash Join
哈希连接,适用于数据量大的表的连接方式。优化器使用两个表中较小的表,利用连接键在内存中建立hash表,然后扫描较大的表并探测散列,找到与散列匹配的行。Sonic和非Sonic的Hash Join的区别在于所使用hash表结构不同,不影响执行的结果集。
- Merge Join
归并连接,通常情况下执行性能差于哈希连接。如果源数据已经被排序过,在执行融合连接时,并不需要再排序,此时融合连接的性能优于哈希连接。
- Nested Loop
- 运算符
- sort
- filter
EXPLAIN输出显示WHERE子句当作一个"filter"条件附属于顺序扫描计划节点。这意味着规划节点为它扫描的每一行检查该条件,并且只输出符合条件的行。预计的输出行数降低了,因为有WHERE子句。不过,扫描仍将必须访问所有 10000 行,因此开销没有降低;实际上它还增加了一些(确切的说,通过10000 * cpu_operator_cost)以反映检查WHERE条件的额外CPU时间。
- LIMIT
- Append
- Aggregate
- BitmapAnd
- BitmapOr
- Gather
- Group
- GroupAggregate
- Hash
- HashAggregate
- Merge Append
- Recursive Union
- SetOp
- Unique
-
一种用于 INTERSECT 或 EXCEPT 等集合操作的策略,它使用 Append 来避免预排序的输入。
- LockRows
- Materialize
- Result
- WindowAgg
- Merge
- StartWith Operator
- Index Cond
- Cstore Index And
- Cstore Index Or
- 其他关键字
- GaussDB培训_GaussDB教程_高斯数据库培训-华为云
- GaussDB数据库云备份_华为GaussDB_高斯数据库云备份
- GaussDB案例指南_高斯数据库函数_高斯数据库案例指南_华为云
- GaussDB TP_GaussDB和MySQL区别_高斯数据库TP_华为云
- GaussDB视频教程_gaussdb查看表结构语句_高斯数据库视频教程_华为云
- GaussDB性能怎么调_华为gaussdb_gaussdb性能_gaussdb学习
- CDN 服务器_CDN哪家好_CDN详解
- GaussDB发展_gaussdb数据库_高斯数据库发展_华为云
- GaussDB性能_Gaussdb数据库性能_高斯数据库性能-华为云
- GaussDB数据库登录_Gaussdb登录管理控制台_高斯数据库登录-华为云