(1) 来自pg文档
PostgreSQL使用的是基于成本的优化器(Cost based optimizer)。理论上基于成本的优化器会计算用户输入的查询语句的每一个合法的查询计划的执行成本,而后从中选择成本最小的计划做为执行查询语句的 最终计划。在实际应用中,查询语句的合法的查询计划的个数是随查询复杂度的增长呈指数增加的。对于过于复杂的查询,若是遍历每一个合法的查询计划,将会消耗 掉大量的时间,这是不能被用户接受的,因此优化器不会遍历每一个合法的查询计划,只会选择一部分查询计划,从中找到执行成本最小的计划。
(2)调整QL查询计划
在oracle中使用hint能够调整SQL的执行计划,
在postgresql能够使用以下的方法进行调整
使用set<option> to off/on;调整查询计划,参数以下:html
enable_seqscan是否走全表扫描sql
enable_hashjoin是否容许走hash链接oracle
enable_nestloop是否容许走nestloop链接oop
enable_mergejoin是否容许走合并链接post
enable_tidscan是否容许走tid扫描(相似oracle中的按rowid访问)优化
enable_bitmapscan是否容许走bitmap扫描spa
enable_hashagg是否容许走hash汇集(也就是作group by时)postgresql
enable_indexscan是否容许走索引htm
enable_sort是否容许走排序排序
constraint_exclusion是否容许走分区