因为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
分享到:
相关推荐
### 慢SQL优化In PostgreSQL #### 一、直接创建索引(Create Index Directly) 创建索引能够显著提升查询性能,特别是在数据量较大时。但需要注意的是,索引的选择性对于提升性能至关重要。例如,如果`WHERE`条件是`...
1. 支持复杂数据类型:不同于传统的关系型数据库仅支持基本的数据类型,PGSQL 引擎允许存储数组、JSON、XML 等复杂数据类型。这种特性使得 PGSQL 在处理半结构化数据和结构化数据混合的场景下表现出色。 2. 全文...
它支持各种PgSql特有的特性,如JSONB、数组、hstore等复杂数据类型,以及触发器、存储过程等数据库对象。Npgsql通过ADO.NET接口与数据库交互,这意味着你可以利用.NET Framework中的SqlCommand、SqlDataReader等类来...
对于pgsql和pdo_pgsql扩展,.so文件分别表示为libpq.so和libphp_pdo_pgsql.so。 1. **检查PHP版本**: 在开始安装之前,我们需要知道当前PHP的版本,因为.so文件必须与PHP版本匹配。可以运行`php -v`命令来查看PHP...
**PostGIS与Shp2pgsql** PostGIS是一个开源的空间数据库扩展,它为PostgreSQL数据库管理系统添加了对地理对象的支持。PostGIS使得存储、查询、分析和操作地理空间数据成为可能,广泛应用于地理信息系统(GIS)领域...
总的来说,pgsql连接工具6.8版的pgAdmin4是一个强大而易用的工具,对于任何需要管理和维护PostgreSQL数据库的人来说,它都是不可或缺的。通过其直观的GUI,用户可以轻松地执行各种数据库操作,提高工作效率,同时...
标题中的“pgsql12”和“pgsql9.6”指的是PostgreSQL数据库的两个不同版本,分别代表12.8和9.6。PostgreSQL是一种开源的关系型数据库管理系统(RDBMS),以其高度稳定性和强大的功能著称。它支持SQL标准,并提供了...
例如,ThinkPHP 默认的数据库驱动可能不支持 PostgreSQL 特有的数据类型或 SQL 语法。 #### 三、解决方案 为了解决上述兼容性问题,我们需要进行以下几步操作: ##### 1. 修改数据库配置文件 首先,需要修改 ...
在IT行业中,数据库设计是开发过程中至关重要的一环。它涉及到数据结构、关系模型以及业务逻辑的规划,确保数据...对于`MySQL`和`pgsql`数据库的使用者来说,熟练掌握这类工具的使用,将极大地提升工作效率和项目质量。
pgsql数据库jdbc驱动jar包
首先,要连接到PGSQL数据库,我们需要使用一个支持.NET的PGSQL驱动,如Npgsql。Npgsql是.NET社区广泛使用的开源库,它提供了全面的API来与PostgreSQL进行交互。安装Npgsql可以通过NuGet包管理器进行,命令为`Install...
一直以来,对于搜索时模糊匹配的优化一直是个让人头疼的问题,好在强大pgsql提供了优化方案,下面就来简单谈一谈如何通过索引来优化模糊匹配 案例 我们有一张千万级数据的检查报告表,需要通过检查报告来模糊搜索...
Nacos-PgSQL是Nacos的一个定制版,它扩展了对PostgreSQL数据库的支持。在原生的Nacos中,数据库连接配置位于`conf/application.properties`或`conf/bootstrap.properties`文件中,通常会看到像`spring.datasource....
在使用PostgreSQL(pgsql)数据库时,MyBatis是一个非常流行的持久层框架,它提供了将SQL查询映射到Java对象的灵活方式。本篇文章将详细探讨如何在pgsql环境中利用MyBatis来生成实体类,从而简化开发过程。 首先,...
对于“pgsql绿色版本安装”这个问题,我们可以理解为用户正在尝试安装一个免安装、便携式的pgsql版本,但遇到了困难。 在安装pgsql时,可能会遇到多种问题,例如依赖库缺失、环境变量配置不正确、端口冲突或权限...
为了优化性能,osm2pgsql支持分块导入,可以将大文件分成小块进行处理。同时,使用索引和适当的分区策略可以进一步提高查询速度。例如,对ways和nodes的geography列创建GIST索引,可以加快空间查询。 **应用场景** ...
在IT行业中,数据库管理是至关重要的,而PostgreSQL(简称PGSql)...对于任何涉及PGSql数据库的项目,这样的工具都是一个宝贵的资产。通过理解其工作原理和文件结构,我们可以更好地利用它来优化我们的数据库管理实践。
博客:PostgreSQL的学习心得和知识总结(六十五)|关于PostgreSQL数据库 实现MySQL数据库find_in_set()函数 的实现方案
7. **驱动程序和库**:对于开发者,pgsql.zip 可能提供了 PostgreSQL 的客户端库(如 libpq)和语言绑定(如 Python、Java、PHP 等),以便在各种编程环境中连接到 PostgreSQL 数据库。 8. **扩展和插件**:...
pgsql驱动jar包,jdk 本身没有提供访问数据库的能力,它只是提供了一些接口,具体功能由各个数据库的的驱动jar包来实现,举个例子,Connection 它只是一个接口,具体的实现由具体的数据库的的驱动jar包实现,你可以在...