博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Parameterized Path 的例子
阅读量:6786 次
发布时间:2019-06-26

本文共 3089 字,大约阅读时间需要 10 分钟。

Improve the planner's ability to use nested loops with inner index scans (Tom Lane)The new "parameterized path" mechanism allows inner index scans to use values from relations that are more than one join level up from the scan. This can greatly improve performance in situations where semantic restrictions (such as outer joins) limit the allowed join orderings.

数据准备:

postgres=# create table tst01(id integer);CREATE TABLEpostgres=# postgres=# insert into tst01 values(generate_series(1,100000));INSERT 0 100000postgres=# postgres=# create index idx_tst01_id on tst01(id);CREATE INDEXpostgres=#

运行:

postgres=# prepare s(int) as select * from tst01 t where id < $1;PREPAREpostgres=# explain execute s(2);                                   QUERY PLAN                                    --------------------------------------------------------------------------------- Index Only Scan using idx_tst01_id on tst01 t  (cost=0.00..8.38 rows=1 width=4)   Index Cond: (id < 2)(2 rows)postgres=# explain execute s(10000);                                      QUERY PLAN                                       --------------------------------------------------------------------------------------- Index Only Scan using idx_tst01_id on tst01 t  (cost=0.00..337.64 rows=10130 width=4)   Index Cond: (id < 10000)(2 rows)postgres=# explain execute s(1000000);                          QUERY PLAN                           --------------------------------------------------------------- Seq Scan on tst01 t  (cost=0.00..1693.00 rows=100000 width=4)   Filter: (id < 1000000)(2 rows)postgres=# explain execute s(100000);                          QUERY PLAN                           --------------------------------------------------------------- Seq Scan on tst01 t  (cost=0.00..1693.00 rows=100000 width=4)   Filter: (id < 100000)(2 rows)postgres=#

这是一个小例子,而且还是一个有些特殊的例子。

对比一下在PostgreSQL9.1.0中的表现:

postgres=# create table tst01(id integer);CREATE TABLEpostgres=# insert into tst01 values(generate_series(1,100000));INSERT 0 100000postgres=# create index idx_tst01_id on tst01(id);CREATE INDEXpostgres=# prepare s(int) as select * from tst01 t where id < $1;PREPAREpostgres=# explain execute s(2);                                   QUERY PLAN                                    --------------------------------------------------------------------------------- Bitmap Heap Scan on tst01 t  (cost=626.59..1486.25 rows=33333 width=4)   Recheck Cond: (id < $1)   ->  Bitmap Index Scan on idx_tst01_id  (cost=0.00..618.26 rows=33333 width=0)         Index Cond: (id < $1)(4 rows)postgres=# explain execute s(10000);                                   QUERY PLAN                                    --------------------------------------------------------------------------------- Bitmap Heap Scan on tst01 t  (cost=626.59..1486.25 rows=33333 width=4)   Recheck Cond: (id < $1)   ->  Bitmap Index Scan on idx_tst01_id  (cost=0.00..618.26 rows=33333 width=0)         Index Cond: (id < $1)(4 rows)postgres=#

可以看到,在9.1里,是不区分状况,执行计划固定。

本文转自健哥的数据花园博客园博客,原文链接:http://www.cnblogs.com/gaojian/p/3140795.html,如需转载请自行联系原作者

你可能感兴趣的文章
连接数据库的操作 总结
查看>>
Android 小米手机开发APP图标更换后还显示原来的图标
查看>>
在代码中修改Shape的solid属性的color值
查看>>
MySQL字符集问题
查看>>
Java多线程总结
查看>>
iPad Mini外屏碎了 换屏幕教程
查看>>
LinkedBlockingQueue操作,线程安全问题,ConcurrentModificationException 异常分析与解决方案...
查看>>
redis3.2新功能--GEO地理位置命令介绍与实战开发
查看>>
java 通过ssh 执行命令
查看>>
算法导论——基数排序(基于计数排序)
查看>>
19.TCP的交互数据流
查看>>
字符串匹配的Boyer-Moore算法
查看>>
memcached数据库未授权访问漏洞解决
查看>>
centos 7 安装在vmware Workstation的网卡问题 RHEL7
查看>>
嵌入式开发平台-iTOP-4418开发板
查看>>
我的友情链接
查看>>
ssh配置公钥私钥(key)登录SecureCRT
查看>>
go 字符串长度为空的判断 效率
查看>>
openstack安装(liberty)--安装认证服务(Identity service)
查看>>
邮件服务器软件为企业分支“搭桥”
查看>>