七叶笔记 » 数据库 » PostgreSQL游标与索引选择实例详细介绍

PostgreSQL游标与索引选择实例详细介绍

2、写入一批随机数据,ID从1到1000万。

3、写入另一批100万条数据,c1,c2 与前面1000万的值不一样。

4、创建两个索引,也就是本文需要重点关注的,到底走哪个索引更划算

5、收集统计信息

6、查看下面SQL的执行计划,走了正确的索引

7、而当我们在游标中使用该SQL时,会发现执行计划出现了偏差

为什么会出现这种情况呢,这其实是因为使用游标的SQL会根据cursor_tuple_fraction参数进行自动优化,而该参数默认是0.1,表示只检索前10%的行进行预估,这就和limit有点异曲同工的味道了。

因为对于这张表,优化器认为数据是均匀分布的,而实际上,数据分布是不均匀的,c1=200 and c2=200的记录在表的末端。当我们在游标中只检索了前10%的行,所以会得到一个错误的执行计划。

具体的细节我们可以在parsenodes.h和planner.c中看到:

当使用cursor或者SPI_PREPARE_CURSOR函数时,会设置CURSOR_OPT_FAST_PLAN标志位,然后就会根据cursor_tuple_fraction参数对SQL进行自动优化,所以对于一些数据分布不均的情况,可能就会

到此这篇关于PostgreSQL游标与索引选择实例详细介绍的文章就介绍到这了,更多相关PostgreSQL游标与索引选择内容请搜索七叶笔记以前的文章或继续浏览下面的相关文章希望大家以后多多支持七叶笔记!

相关文章