通过 EXPLAIN 查看了具体的执行计划之后,我们还能尝试影响优化器,让优化器生成我们想要的执行计划。不过,PostgreSQL 没有像 Oracle 那样通过在 SQL 语句中增加 HINT 信息的方式来影响执行计划的生成。但它也提供了一系列的 GUC 参数,比如在前面的课程中曾使用 enable_material 参数来尝试禁用 material,而且确实达到了禁用的效果。PostgreSQL 针对大部分算子都给出了具体的 GUC 参数,下面先把这些 GUC 参数列出来:
- enable_bitmapscan
- enable_gathermerge
- enable_hashagg
- enable_hashjoin
- enable_indexonlyscan
- enable_indexscan
- enable_material
- enable_mergejoin
- enable_nestloop
- enable_parallel_append
- enable_parallel_hash
- enable_partitionwise_join
- enable_seqscan
- enable_sort
- enable_tidscan
每个 GUC 参数都可以通过下面的方式来设置:
SET GUC_NAME = ON/OFF;
扫描路径的调整
可以先来看一
本文介绍了如何影响 PostgreSQL 的优化器生成执行计划,通过设置不同的 GUC 参数来调整扫描路径、连接路径、聚集与分组的执行计划。讨论了禁用不同扫描方式如 Seq Scan、Index Scan 和 Bitmap Scan 对执行计划的影响,以及连接算子如嵌套循环、哈希连接和归并连接的选择。同时,还探讨了并行执行计划的调整和限制。
订阅专栏 解锁全文
716

被折叠的 条评论
为什么被折叠?



