PostgreSQL主键索引膨胀的重建方法
普通的索引膨胀处理比较简单,主键的索引膨胀也不复杂,只是在新旧索引交替时有一些小处理。本试验在primary key上通过CONCURRENTLY建立第二索引来解决索引膨胀问题,适用9.3、9.4,其他版本使用前请实际测试。
创建测试表
Table "swrd.mytbl"
Column | Type | Modifiers
--------+-----------------------------+----------------------------------------------------
id | integer | not null default nextval('mytbl_id_seq'::regclass)
val | timestamp without time zone | default now()
Indexes:
"mytbl_pkey" PRIMARY KEY, btree (id)
生成测试数据
生成测试数据步骤略,这里为了清楚看到测试的情况,生成10000000条。
swrd=# SELECT COUNT(*) FROM mytbl;
count
----------
10000000
(1 row)
创建第二索引
在id上创建第二索引,记得使用CONCURRENTLY参数
swrd=# CREATE UNIQUE INDEX CONCURRENTLY ON mytbl USING btree(id);
CREATE INDEX
可以看到id字段上同时有两个索引mytbl_pkey和mytbl_id_idx
swrd=# SELECT schemaname,relname,indexrelname,pg_relation_size(indexrelid) AS index_size,idx_scan,idx_tup_read,idx_tup_fetch FROM pg_stat_user_indexes WHERE indexrelname IN (SELECT indexname FROM pg_indexes WHERE schemaname = 'swrd' AND tablename = 'mytbl');
schemaname | relname | indexrelname | index_size | idx_scan | idx_tup_read | idx_tup_fetch
------------+---------+--------------+------------+----------+--------------+---------------
swrd | mytbl | mytbl_pkey | 224632832 | 0 | 0 | 0
swrd | mytbl | mytbl_id_idx | 224641024 | 0 | 0 | 0
(2 rows)
替换索引
开启事务删除主键索引同时将第二索引更新为主键的约束
swrd=# begin;
BEGIN
swrd=# ALTER TABLE mytbl DROP CONSTRAINT mytbl_pkey;
ALTER TABLE
swrd=# ALTER TABLE mytbl ADD CONSTRAINT mytbl_id_idx PRIMARY KEY USING INDEX mytbl_id_idx;
ALTER TABLE
swrd=# END;
COMMIT
检查测试表的索引,可见现在只有第二索引了
swrd=# SELECT schemaname,relname,indexrelname,pg_relation_size(indexrelid) AS index_size,idx_scan,idx_tup_read,idx_tup_fetch FROM pg_stat_user_indexes WHERE indexrelname IN (SELECT indexname FROM pg_indexes WHERE schemaname = 'swrd' AND tablename = 'mytbl');
schemaname | relname | indexrelname | index_size | idx_scan | idx_tup_read | idx_tup_fetch
------------+---------+--------------+------------+----------+--------------+---------------
swrd | mytbl | mytbl_id_idx | 224641024 | 0 | 0 | 0
(1 row)
检查表的定义
检查表定义,可以看到与最初建表时是一样的
swrd=# \d+ mytbl
Table "swrd.mytbl"
Column | Type | Modifiers | Storage | Stats target | Description
--------+-----------------------------+----------------------------------------------------+---------+--------------+-------------
id | integer | not null default nextval('mytbl_id_seq'::regclass) | plain | |
val | timestamp without time zone | default now() | plain | |
Indexes:
"mytbl_id_idx" PRIMARY KEY, btree (id)
PostgreSQL主键索引膨胀的重建方法的更多相关文章
- oracle 数据库 主键索引重建
oracle 数据库 主键索引重建 alter table table_name drop primary key; alter table table_name add constraint pk_ ...
- 如何删除mysql 主键索引
如果一个主键是自增长的,不能直接删除该列的主键索引, 应当先取消自增长,再删除主键特性 alter table 表名 drop primary key; [如果这个主键是自增的,先取消自增长.] ...
- 1226关于count(*)不走主键索引反而走二级索引
转自 http://www.2cto.com/database/201508/433975.html mysqlcount(*)会选哪个索引? 2015-08-19 0个评论 来源:D ...
- 修改mysql表结构,添加一个主键索引自增字段,修改原来的主字段为普通字段
原来有一个字段id,为自增,主键,索引.现在要新增一个字段s_id为自增,主键,索引.同时把原来的主字段改成普通字段,默认值为0. Alter table e_diamond_jhds change ...
- Mysql索引介绍及常见索引(主键索引、唯一索引、普通索引、全文索引、组合索引)的区别
Mysql索引概念:说说Mysql索引,看到一个很少比如:索引就好比一本书的目录,它会让你更快的找到内容,显然目录(索引)并不是越多越好,假如这本书1000页,有500也是目录,它当然效率低,目录是要 ...
- MYSQL的全表扫描,主键索引(聚集索引、第一索引),非主键索引(非聚集索引、第二索引),覆盖索引四种不同查询的分析
文章出处:http://inter12.iteye.com/blog/1430144 MYSQL的全表扫描,主键索引(聚集索引.第一索引),非主键索引(非聚集索引.第二索引),覆盖索引四种不同查询的分 ...
- Mysql主键索引、唯一索引、普通索引、全文索引、组合索引的区别
原文:Mysql主键索引.唯一索引.普通索引.全文索引.组合索引的区别 Mysql索引概念: 说说Mysql索引,看到一个很少比如:索引就好比一本书的目录,它会让你更快的找到内容,显然目录(索引)并不 ...
- 删除指定表的所有索引,包括主键索引,唯一索引和普通索引 ,适用于sql server 2005,
原文:删除指定表的所有索引,包括主键索引,唯一索引和普通索引 ,适用于sql server 2005, --删除指定表中所有索引 --用法:declare @tableName varchar(100 ...
- mysql索引之主键索引
MySQL目前主要有以下几种索引类型:1.普通索引2.唯一索引3.主键索引4.组合索引5.全文索引 二.语句 CREATE TABLE table_name[col_name data type] [ ...
随机推荐
- Python里//与/的区别?
1.Python里面//的作用是除法取整,也就是直接取整数部分 例如:5//6=0; 56//3=18 2.而/的作用是直接进行常规的除法运算 例如:56/8=7 程序运算实例如下:
- flume-kafka-storm-hdfs-hadoop-hbase
# bigdata-demo 项目地址: https://github.com/windwant/bigdata-demo.git hadoop: hadoop hdfs操作 log输出到flume ...
- 深入理解 Vuejs 动画效果
本文主要归纳在 Vuejs 学习过程中对于 Vuejs 动画效果的各个相关要点.由于本人水平有限,如文中出现错误请多多包涵并指正,感谢.如果需要看更清晰的代码高亮,请跳转至我的个人站点的 深入理解 V ...
- 聊一聊session
最近从上家公司离职了,到了一家新公司,这几天一直在了解他们的项目,所以我自己的那个小项目也暂时搁浅了.. 今天差不多把他们的项目了解了,来院子写写我在这里边遇到的问题,影响最深刻的是seesion的. ...
- cygwin—excellent work!
使用cygwin的好处在于可以避免直接使用linux同时又能最大限度的节省资源,共享windows的资源. 安装cygwin 安装安简单,当然,你首先需要使用163或者国内或者亚洲比较好的镜像作为下载 ...
- visionpro吧-百度贴吧
Halcon,Visionpro视频教程,观看下载地址:http://www.211code.com
- 压力测试工具-webbench
简述 偶然情况下看到一款性能测试工具webbench,看着挺不错的记录一下安装过程,在以后项目上线过程中可以压一压一些页面的并发情况,对项目性能有个大致的了解. 原理 webbench首先fork出多 ...
- 转战Java~
记得16年5月份开始学的Java,当时就是为了学Hadoop才学的Java基础,之后Hadoop没学成,倒是学了Java Web的东西,当时就是玩玩,然后弄了个WeChat后台,就完事了.然后就又回到 ...
- 3DMAX2016破解教程
首先,断网. 然后,下载3DMAX2016注册机. 然后,打开已经安装的3DMAX2016,会出现下图,点击激活按钮. 之后,以管理员身份打开3DMAX2016注册机,把申请号复制到注册机里面的请求码 ...
- Scrum 冲刺博客,项目总结
1.各个成员在 Alpha 阶段认领的任务 数据库环境的搭建,连接数据库:张陈东芳 数据库语句sql语句:张陈东芳 商品实体类的实现:吴敏烽 获取所有商品信息的实现:吴敏烽 根据商品编号获得商品资料: ...