文档章节

postgresql部分索引(Partial index)

一群河马
 一群河马
发布于 2015/03/04 14:53
字数 427
阅读 52
收藏 0

主要是在满足条件的部分上建立索引,特别情况下的索引效率会很高.

创建partial index

db01=# create table t_index(id int,name varchar(30));
CREATE TABLE
db01=# insert into t_index select generate_series(1,1000),'name';
INSERT 0 1000
db01=# insert into t_index select generate_series(1001,1010),'name1';
INSERT 0 10
db01=# create index idx_t_index01 on t_index(name) where name != 'name';
CREATE INDEX
db01=# explain select * from t_index where name != 'name';
                                  QUERY PLAN                                   
-------------------------------------------------------------------------------
 Index Scan using idx_t_index01 on t_index  (cost=0.14..12.31 rows=10 width=9)
(1 row)

db01=# explain select * from t_index where name = 'name2';
                                 QUERY PLAN                                  
-----------------------------------------------------------------------------
 Index Scan using idx_t_index01 on t_index  (cost=0.14..4.15 rows=1 width=9)
   Index Cond: ((name)::text = 'name2'::text)
(2 rows)

db01=# explain select * from t_index where name = 'name';
                        QUERY PLAN                         
-----------------------------------------------------------
 Seq Scan on t_index  (cost=0.00..18.62 rows=1000 width=9)
   Filter: ((name)::text = 'name'::text)
(2 rows)

索引列跟where条件可以不同

db01=# drop index idx_t_index01;
DROP INDEX
db01=# create index idx_t_index02 on t_index(name) where id between 300 and 500;
CREATE INDEX
db01=# explain select * from t_index where name = 'name1' and id = 209;
                        QUERY PLAN                         
-----------------------------------------------------------
 Seq Scan on t_index  (cost=0.00..21.15 rows=1 width=9)
   Filter: (((name)::text = 'name1'::text) AND (id = 209))
(2 rows)

db01=# explain select * from t_index where name = 'name1' and id = 300;
                                 QUERY PLAN                                  
-----------------------------------------------------------------------------
 Index Scan using idx_t_index02 on t_index  (cost=0.14..8.19 rows=1 width=9)
   Index Cond: ((name)::text = 'name1'::text)
   Filter: (id = 300)
(3 rows)

从oracle 12C开始也支持这种索引.

索引的维护

db01=# update t_index set id = 3000 where id =300;
UPDATE 1
db01=# explain select * from t_index where id = 3000;
                       QUERY PLAN                       
--------------------------------------------------------
 Seq Scan on t_index  (cost=0.00..18.62 rows=1 width=9)
   Filter: (id = 3000)
(2 rows)

索引条目已经被移除索引,所以pg会自动维护相关索引

总结

部分索引的使用特别适用在大部分数据访问较少,只有部分数据需要经常访问的情况
比如未审核的单子,随着时间审核完成的越来越多,未审核的永远是那么些少数

© 著作权归作者所有

共有 人打赏支持
一群河马
粉丝 6
博文 74
码字总数 49404
作品 0
浦东
架构师
私信 提问
PostgreSQL 11 preview - 索引优化。filter智能消除、分区索引智能合并

标签 PostgreSQL , 分区 , 约束 , partial index , 消除冗余Filter , 合并partial index scan 背景 当数据量较大时,对数据分区是一种比较不错的数据管理手段。 每个分区都有对应的边界定义,...

德哥
2018/04/18
0
0
PostgreSQL 类微博FEED系统 - 设计与性能指标

标签 PostgreSQL , feed , 微博 , 推送 , 分区 , 分片 , UDF , 挖掘 , 文本挖掘 背景 类微博系统,最频繁用到的功能: 之前写过一篇《三体高可用PCC大赛 - facebook微博 like场景 - 数据库设...

德哥
2018/04/18
0
0
PostgreSQL 9.2.2/9.1.7/9.0.11/8.4.15 发布

PostgreSQL 发布了所有分支版本的更新,包括:9.2.2, 9.1.7, 9.0.11, 8.4.15, 和 8.3.22. 如果你正在使用 PG 的热备复制应该尽快在下次维护时升级。 该版本修复了一个显著的跟热备相关的页排...

oschina
2012/12/06
1K
7
【独家直播】 德哥PG系列课程—PostgreSQL 多场景 沙箱实验

标签 PostgreSQL , 沙箱 , 实验 背景 为了能够让用户可以更快的上手PostgreSQL,德哥与云栖团队的小伙伴制作了一系列阿里云RDS PostgreSQL沙箱实验。 所有实验内容都结合了应用场景,非常具有...

小白dora
01/10
0
0
PostgreSQL Indexes don't mean slow inserts - 索引改进PPT(写优化, lsm, Fractal, index buffer, COLA)

标签 PostgreSQL , LSM , index buffer , COLA , Cache-oblivious lookahead arrays , Fractal Tree , Covering and Unique 背景 https://wiki.postgresql.org/images/8/8b/WO-Indexes1.0.pd......

德哥
2018/10/05
0
0

没有更多内容

加载失败,请刷新页面

加载更多

前端、后端和全栈到底不该学什么

1、前言 在职业规划咨询过程中经常会被问到这样的问题: 老师,我是该深入钻研专精一门,走技术大牛路线,还是所有都要精通,做一个全栈工程师? 类似问题的变种还有,老师我是不是该30岁最迟...

前端攻城小牛
31分钟前
3
0
【git命令】git-stash

应用场景 应用场景:使用git的时候,我们往往使用branch解决任务切换问题,例如,我们往往会建一个自己的分支去修改和调试代码, 如果别人或者自己发现原有的分支上有个不得不修改的bug,我们...

echojson
32分钟前
2
0
centos7.3编译安装OpenSSL1.1.1b

简介 OpenSSL是一个开放源代码的软件库包,应用程序可以使用这个包来进行安全通信,避免窃听,同时确认另一端连接者的身份。这个包广泛被应用在互联网的网页服务器上。 安装 下载:下载地址 ...

阿dai学长
34分钟前
1
0
0基础【转行】大数据

目前大数据行业异常火爆,不少人都对大数据充满了兴趣,其中有大部分人都是之前没有接触过计算机技术的,对编程语言也不太了解,那是不是这部分零基础的朋友就学不了大数据了呢?答案当然是否...

董黎明
35分钟前
1
0
Krpano 动态传参-action

效果解释:点击热点1,触发显示或隐藏热线2。 hotspot等标签允许编写自定义属性,这里直接设置自定义属性为dk=spot6,点击spot7,显示或隐藏spot6。 action方法体中,直接引用get(dk)即可获得...

华山猛男
40分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部