PostgreSQL的部分索引

server/2024/9/24 13:13:53/

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

我以前用过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/server/101086.html

相关文章

WebRTC音视频开发读书笔记(一)

一、基本概念 WebRTC(Web Real-Time Communication&#xff0c;网页即时通信)于2011年6月1日开源&#xff0c;并被纳入万维网联盟的W3C推荐标准&#xff0c;它通过简单API为浏览器和移动应用提供实时通信RTC功能。 1、特点 跨平台&#xff1a;可以在Web&#xff0c;Android、…

【深度学习实战】利用Linear Regression预测房价

本文参考了李沐老师的b站深度学习课程 课程链接&#xff0c;使用了线性回归模型&#xff0c;特别适合深度学习初学者。通过阅读本文&#xff0c;你将学会如何用PyTorch训练模型&#xff0c;并掌握一些实用的训练技巧。希望这些内容能对你的深度学习学习有所帮助。 安装pytorch …

【Spark集群部署系列一】Spark local模式介绍和搭建以及使用(内含Linux安装Anaconda)

简介 注意&#xff1a; 在部署spark集群前&#xff0c;请部署好Hadoop集群&#xff0c;jdk8【当然Hadoop集群需要运行在jdk上】&#xff0c;需要注意hadoop&#xff0c;spark的版本&#xff0c;考虑兼容问题。比如hadoop3.0以上的才兼容spark3.0以上的。 下面是Hadoop集群部署…

MySQL 查询分组内最新的第一条数据

目录 1、MySQL 5版本的写法 2、MySQL 8版本的写法 由于MySQL 5不支持窗口函数&#xff0c;因此不能使用PARTITION()、ROW_NUMBER() &#x1f330;&#xff1a;获取每个班级中最新注册的学号人员信息 也就是从 user_info 学生表中获取每个 class_id 班级的最新一条记录 1、…

土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测

土地利用/土地覆盖数据是生态、环境和气象等领域众多模型的重要输入参数之一。基于遥感影像解译&#xff0c;可获取历史或当前任何一个区域的土地利用/土地覆盖数据&#xff0c;用于评估区域的生态环境变化、评价重大生态工程建设成效等。借助CLUE模型&#xff0c;实现对未来土…

虚拟人实时主持创意互动方案:赋能峰会论坛会议等活动科技互动感

随着增强现实、虚拟现实等技术的不断发展&#xff0c;“虚拟人实时主持”创意互动模式逐渐代替传统单一真人主持模式&#xff0c;虚拟主持人可以随时随地出现在不同活动现场&#xff0c;也可以同一时间在不同分会场中担任主持工作&#xff0c;在峰会、论坛、会议、晚会、发布会…

关于xilinx的FFTIP的使用和仿真

工具&#xff1a;vivado2018.3&#xff0c;modelsim10.6d 场景&#xff1a;在进行数据进行频谱分析的时候&#xff0c;使用FPGA来完成FFT的计算可以加快数据的计算速度。 下面使用仿真完成DDS产生的数据的FFT以及IFFT。原始数据使用DDSIP产生&#xff0c;通过IP产生的波形数据…

One-hot编码

One-hot编码是一种将分类变量&#xff08;如类别或标签&#xff09;转换为数值表示的方法。在机器学习和数据处理中&#xff0c;分类变量通常需要被转换为数值形式&#xff0c;以便可以输入到算法中进行训练或预测。 One-hot编码通过创建一个二进制的列向量来表示每一个可能的类…