PostgreSQL的部分索引

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

我以前用过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)

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

相关推荐
惜分飞1 分钟前
ORA-600 kcratr_nab_less_than_odr和ORA-600 4193故障处理--惜分飞
数据库·oracle
chian-ocean1 分钟前
CANN 生态进阶:利用 `profiling-tools` 优化模型性能
数据库·mysql
m0_550024635 分钟前
持续集成/持续部署(CI/CD) for Python
jvm·数据库·python
AC赳赳老秦6 分钟前
代码生成超越 GPT-4:DeepSeek-V4 编程任务实战与 2026 开发者效率提升指南
数据库·数据仓库·人工智能·科技·rabbitmq·memcache·deepseek
啦啦啦_999919 分钟前
Redis-2-queryFormat()方法
数据库·redis·缓存
玄同7651 小时前
SQLite + LLM:大模型应用落地的轻量级数据存储方案
jvm·数据库·人工智能·python·语言模型·sqlite·知识图谱
吾日三省吾码1 小时前
别只会“加索引”了!这 3 个 PostgreSQL 反常识优化,能把性能和成本一起打下来
数据库·postgresql
chian-ocean1 小时前
百万级图文检索实战:`ops-transformer` + 向量数据库构建语义搜索引擎
数据库·搜索引擎·transformer
小Tomkk2 小时前
数据库 变更和版本控制管理工具 --Bytebase 安装部署(linux 安装篇)
linux·运维·数据库·ci/cd·bytebase
qq_12498707532 小时前
基于JavaWeb的大学生房屋租赁系统(源码+论文+部署+安装)
java·数据库·人工智能·spring boot·计算机视觉·毕业设计·计算机毕业设计