因为pgsql的查询规划器可以智能地分解条件,比如
SELECT * FROM tk WHERE tk.id = 1 OR tk.id = 2
规划器可以智能地分解成两条针对有索引的id字段的查询,然后作UNION。
那IN的情况如何呢?
SELECT * FROM tk WHERE tk.id IN (1,2,3)
explain 结果居然不是想象中的分解而是使用了pgsql的数组类型来处理
Bitmap Heap Scan on tk (cost=12.77..21.82 rows=3 width=72)
Recheck Cond: (id = ANY ('{1,2,3}'::integer[]))
-> Bitmap Index Scan on tk_pkey (cost=0.00..12.77 rows=3 width=0)
Index Cond: (id = ANY ('{1,2,3}'::integer[]))
Time: 0.015s
效率比手动分解还要高!
SELECT * FROM tk WHERE tk.id = 1 OR tk.id = 2 OR tk.id =3
Bitmap Heap Scan on tk (cost=12.78..21.83 rows=3 width=72)
Recheck Cond: ((id = 1) OR (id = 2) OR (id = 3))
-> BitmapOr (cost=12.78..12.78 rows=3 width=0)
-> Bitmap Index Scan on tk_pkey (cost=0.00..4.26 rows=1 width=0)
Index Cond: (id = 1)
-> Bitmap Index Scan on tk_pkey (cost=0.00..4.26 rows=1 width=0)
Index Cond: (id = 2)
-> Bitmap Index Scan on tk_pkey (cost=0.00..4.26 rows=1 width=0)
Index Cond: (id = 3)
Time: 0.047s
对于mysql来说两种方式没区别,它的查询优化器没那么智能和强大,连OR都不能分解的。所以叫优化器而不是规划器——要靠人肉来做优化 :p
分享到:
相关推荐
pgsql拼接pgsql拼接pgsql拼接pgsql拼接
nacos默认只支持mysql数据库链接,有些项目用的是pgsql,所以做了一个能支持pgsql的nacos包
解决thinkphp不能兼容pgsql的问题,在开发过程中不能读取数据库。希望对大家有用。
asp.net C# PgSql驱动,包含了Npgsql.dll 与 mono.security。 gauss系统数据库也可用。
不想到处乱找,直接下载使用。
一直以来,对于搜索时模糊匹配的优化一直是个让人头疼的问题,好在强大pgsql提供了优化方案,下面就来简单谈一谈如何通过索引来优化模糊匹配 案例 我们有一张千万级数据的检查报告表,需要通过检查报告来模糊搜索...
pgsql使用中,遇到mybatis
博客:PostgreSQL的学习心得和知识总结(六十五)|关于PostgreSQL数据库 实现MySQL数据库find_in_set()函数 的实现方案
pgsql 9.4 64位;arcgis server 10.4 postgis pg94x64 ArcGIS Server 10.4.1.ecp arcgis 10.6 ;pgsql 9.4 64位;arcgis server 10.4 postgis pg94x64 ArcGIS Server 10.4.1.ecp arcgis 10.6 ;pgsql 9.4 64位;...
pgsql驱动jar包,jdk 本身没有提供访问数据库的能力,它只是提供了一些接口,具体功能由各个数据库的的驱动jar包来实现,举个例子,Connection 它只是一个接口,具体的实现由具体的数据库的的驱动jar包实现,你可以在...
PGSQL ODBC 13
pgsql客户端管理工具
Pgsql常见问题
pgsql.zip 下载下载
navicat_pgsql navicat_pgsql navicat_pgsql navicat_pgsql
整合了一些常见的易出错的问题,为PGSQL学习提供了参考。
PgSQL常用命令
centos下php安装pgsql和pdo_pgsql扩展,这是另一种方法,很简便,用.so文件来安装
根据PGSql表结构生成其对应的表结构文档
pgsql实现全文检索,需要安装必须的插件,内容写了如何安装等!