PostgreSQL的部分索引

embedded/2024/9/23 9:22:46/

每个数据库的部分索引还不一样

我以前用过MySQL的部分索引。不过说实话使用场景不多。于是上次本来打算在书中也写这个。结果徐老师说PG的不一样。后来我尝试了。果然不一样。

xxg=# explain select * from xxg;
QUERY PLAN

Seq Scan on xxg (cost=0.00…45691.00 rows=100000 width=12)
(1 row)

xxg=# \d xxg
Table “public.xxg”
Column | Type | Collation | Nullable | Default
--------±--------±----------±---------±--------
id | integer | | |
a | integer | | |
b | integer | | |
Indexes:
“t1” btree (id)

ID列有一个索引。
xxg=#
xxg=# explain select * from xxg where id<10;
QUERY PLAN

Index Scan using t1 on xxg (cost=0.42…20.90 rows=10 width=12)
Index Cond: (id < 10)
(2 rows)
这个SQL用到了ID索引,属于正常。

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

创建一个PG的部分索引 --它的部分不是索引列的部分,而是结果集的部分。

但是创建时候犯了个错误 (我给a列创建,条件写的是id。这是半年前的事情。当时没注意,结果是死活不起作用)

xxg=# create index xxg_a on xxg (a) where id<10;
CREATE INDEX

xxg=# explain select * from xxg where a<10;
QUERY PLAN

Seq Scan on xxg (cost=0.00…45941.00 rows=10 width=12)
Filter: (a < 10)
(2 rows)

后来才发现原来是ID列。非常尴尬。用ID查询是可以了。于是发现好像where之前的括号没什么用处。

xxg=# explain select * from xxg where id<10;
QUERY PLAN

Index Scan using xxg_a on xxg (cost=0.14…16.59 rows=10 width=12)
(1 row)

然后就创建一个范围的部分索引。最后发现在这个范围内的可以使用所以,而范围以外就无法使用。当然这也是有特定场景的意义。一般场景用不到。

xxg=# create index xxg_b on xxg (b) where b>10 and b<100;
CREATE INDEX

xxg=# explain select * from xxg where b=22;
QUERY PLAN

Index Scan using xxg_b on xxg (cost=0.14…8.16 rows=1 width=12)
Index Cond: (b = 22)
(2 rows)

xxg=# explain select * from xxg where b=220;
QUERY PLAN

Seq Scan on xxg (cost=0.00…45941.00 rows=1 width=12)
Filter: (b = 220)
(2 rows)

时隔半年写了一下。当时书中后来没把这个加进去。以后再结合实际加到后续中吧。


http://www.ppmy.cn/embedded/95735.html

相关文章

CentOS7安装流程步骤详细教程

1. 简介 1.1. 概述 CentOS 7是一款基于Red Hat Enterprise Linux(RHEL)的开源Linux发行版,它提供了一个稳定、安全、高效的操作系统,适用于企业级应用、服务器、云计算等领域。CentOS 7以其高度的稳定性和安全性而闻名,它广泛应用于各种行业和领域,包括政府、金融、医疗、…

weblogic漏洞——CVE-2020-14882

一、基本信息 靶机&#xff1a;IP&#xff1a;192.168.100.40 二、攻击过程 进入 vulhub 靶场相关目录&#xff0c;并启动环境 cd master/weblogic/CVE-2020-14882 docker-compose up -d 绕过登录验证 http://192.168.100.40:7001/console/css/%252e%252e%252fconsole.por…

UIButton的UIEdgeInsetsMake属性(setTitleEdgeInsets,setImageEdgeInsets)

一.UIEdgeInsetsMake的四个属性 UIEdgeInsetsMake 有四个属性,依次是 Top,left,bottom,right [Btn setTitleEdgeInsets:UIEdgeInsetsMake( top, left, bottom, right)]; 四个属性的默认值为0,拿其中一个left属性来聊, 你可以理解为文字距离Btn左边界的“位移”是0, 如果…

Harbor私有仓库

一.什么是Harbor私有仓库 Harbor 是一个开源的企业级 Docker 镜像仓库&#xff0c;提供了对 Docker 镜像的管理和分发功能。它作为私有仓库&#xff0c;允许组织在内部安全地存储和管理 Docker 镜像。Harbor 提供了图形用户界面、访问控制、审计日志、镜像扫描、复制和备份等功…

程序员如何平衡日常编码工作与提升式学习?

程序员如何平衡日常编码工作与提升式学习&#xff1f; 在快速迭代的编程世界中&#xff0c;程序员们不仅需要高效完成日常编码任务&#xff0c;还需不断学习新技术、深化专业知识&#xff0c;以应对日益复杂的项目挑战。然而&#xff0c;如何在繁忙琐碎的编码工作与个人成长之…

2024-08-15 商业分析-20240815事项-误区分析

摘要: 技术作为最后实现的最后一个环节&#xff0c;总是无法脱离商业场景独立存在&#xff0c;即使是作为基础设施&#xff0c;也是作为整个分层体系的一个部分而支撑起更为上层的业务。作为单纯的实现手段来看&#xff0c;也是与更为上层的逻辑存在一些不同。作为现实世界的一…

C++(27): 线程池

目录 1. 概述 2. 例程 &#xff08;1&#xff09;ThreadPool.h &#xff08;2&#xff09;ThreadPool.cpp &#xff08;3&#xff09;Start.cpp &#xff08;4&#xff09;编译 1. 概述 线程池技术绝不是C独有的&#xff0c;Java和Python都有比较晚完善的线程池构造接口…

python实现每天定时发送邮件

文章目录 步骤 1: 安装所需的库步骤 2: 编写发送电子邮件的 Python 脚本步骤 3: 配置电子邮件发送服务步骤 4: 运行脚本进一步扩展 要编写一个用于自动发送每日电子邮件报告的 Python 脚本&#xff0c;并配置它在每天的特定时间发送电子邮件&#xff0c;使用 smtplib 和 emai…