千家信息网

数据库postgres index vaccum学习

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,VoicePortal=# create table testindex (no serial primary key, value integer);NOTICE: CREATE TABLE wil
千家信息网最后更新 2026年11月02日数据库postgres index vaccum学习

VoicePortal=# create table testindex (no serial primary key, value integer);
NOTICE: CREATE TABLE will create implicit sequence "testindex_no_seq" for serial column "testindex.no"
NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "testindex_pkey" for table "testindex"

VoicePortal=# insert into testindex(value)
VoicePortal-# select trunc(random() *10) from generate_series(1,1000); random()会产生一个0.**的数字,10就是十以内的数字
INSERT 0 1000 产生一千个10以内的随机数,并且把他们作为value值插入到testindex里面去
VoicePortal=# select * from testindex limit 10;
no | value
----+-------
1 | 0
2 | 8
3 | 3
4 | 2
5 | 8
6 | 9
7 | 6
8 | 5
9 | 9
10 | 9
(10 rows)

这样testindex的表建好了,用它来做测试

VoicePortal=# \d testindex
Table "public.testindex"
Column | Type | Modifiers
--------+---------+--------------------------------------------------------
no | integer | not null default nextval('testindex_no_seq'::regclass)
value | integer |
Indexes:
"testindex_pkey" PRIMARY KEY, btree (no) 自动建立索引
流出一个table的详细信息。

VoicePortal=# \di+ testindex_pkey 查表的索引大小
List of relations
Schema | Name | Type | Owner | Table | Size | Description
--------+----------------+-------+----------+-----------+-------+-------------
public | testindex_pkey | index | postgres | testindex | 40 kB |
(1 row)

VoicePortal=# \dt+ testindex 查表大小
List of relations
Schema | Name | Type | Owner | Size | Description
--------+-----------+-------+----------+-------+-------------
public | testindex | table | postgres | 64 kB |
(1 row)

现在testindex里面有1000条数据,我再往里面加1000条。

VoicePortal=# insert into testindex VALUES ('1001',8);
INSERT 0 1
VoicePortal=# select count(*) from testindex;
count

1001
(1 row)
VoicePortal=# insert into testindex(value)
select trunc(random() *10) from generate_series(1002,1100);
INSERT 0 99

VoicePortal=# insert into testindex(value)
VoicePortal-# select trunc(random()*10)from generate_series(1101,2000);
INSERT 0 900

VoicePortal=# \di+ testindex_pkey;
List of relations
-[ RECORD 1 ]---------------
Schema | public
Name | testindex_pkey
Type | index
Owner | postgres
Table | testindex
Size | 64 kB
Description |

VoicePortal=# \dt+ testindex;
List of relations
-[ RECORD 1 ]----------
Schema | public
Name | testindex
Type | table
Owner | postgres
Size | 96 kB
Description |

再删除一些数据

VoicePortal=# delete FROM testindex where value <8;
DELETE 605

VoicePortal=# select * from pg_stat_user_tables where relname='testindex';
-[ RECORD 1 ]-----+------------------------------
relid | 1445721
schemaname | public
relname | testindex
seq_scan | 8
seq_tup_read | 5831
idx_scan | 1
idx_tup_fetch | 1001
n_tup_ins | 2001
n_tup_upd | 0
n_tup_del | 1597
n_tup_hot_upd | 0
n_live_tup | 403
n_dead_tup | 605
last_vacuum |
last_autovacuum | 2016-12-08 18:09:00.7149-07
last_analyze | 2016-12-08 18:03:16.074174-07
last_autoanalyze | 2016-12-08 18:09:00.715874-07
vacuum_count | 0
autovacuum_count | 1
analyze_count | 2
autoanalyze_count | 3

这些数据会暂时放在dead里面等待autovaccum

VoicePortal=# select * from pg_stat_user_tables where relname='testindex';
-[ RECORD 1 ]-----+------------------------------
relid | 1445721
schemaname | public
relname | testindex
seq_scan | 8
seq_tup_read | 5831
idx_scan | 1
idx_tup_fetch | 1001
n_tup_ins | 2001
n_tup_upd | 0
n_tup_del | 1597
n_tup_hot_upd | 0
n_live_tup | 403
n_dead_tup | 0
last_vacuum |
last_autovacuum | 2016-12-08 18:11:00.715995-07
last_analyze | 2016-12-08 18:03:16.074174-07
last_autoanalyze | 2016-12-08 18:11:00.716891-07
vacuum_count | 0
autovacuum_count | 2
analyze_count | 2
autoanalyze_count | 4
之后清空dead。
VoicePortal=# \di+ testindex_pkey;
List of relations
-[ RECORD 1 ]---------------
Schema | public
Name | testindex_pkey
Type | index
Owner | postgres
Table | testindex
Size | 64 kB
Description |

VoicePortal=# \dt+ testindex;
List of relations
-[ RECORD 1 ]----------
Schema | public
Name | testindex
Type | table
Owner | postgres
Size | 104 kB
Description |

也就是说只要最后一个数据存在,vacuum是无法真正释放空间的

VoicePortal=# vacuum FULL testindex;
VACUUM
VoicePortal=# \di+ testindex_pkey;
List of relations
-[ RECORD 1 ]---------------
Schema | public
Name | testindex_pkey
Type | index
Owner | postgres
Table | testindex
Size | 32 kB
Description |

VoicePortal=# \dt+ testindex;
List of relations
-[ RECORD 1 ]----------
Schema | public
Name | testindex
Type | table
Owner | postgres
Size | 16 kB
Description |

FULL vacuum可以做到,他会改变原来的排序,重新排列。

数据 大小 数字 索引 也就是 也就是说 信息 就是 空间 随机数 建好 排序 测试 数据库 学习 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网络科技 互联网科技活动banner 科技创新与互联网经济 北京互联网科技公司 狮子座互联网科技 壹账通互联网科技 善班互联网科技有限公司 互联网科技缩写 互联网科技实习生岗位职责 赶超互联网科技 微信多开 呼和浩特新华互联网科技学院 亳州好赞互联网科技有限公司 南博望互联网科技有限公司 互联网方面的科技前沿 智帮互联网科技公司最近动向 互联网科技资金流入 半导体是互联网高科技吗 广东鹅鹅鹅互联网科技有限公司 青岛互联网科技园 知域互联网科技有限公司官网 苏州找大状互联网科技有限公司 互联网核心科技是什么 海南购全球互联网科技 赶超互联网科技 微信多开 阿大互联网科技有限公司 四川慕妮娅互联网科技有限公司 中天科技中国工业互联网 山东大美朱楼互联网科技有限公司 盐城市攀科互联网科技有限公司 河南商务圈互联网科技有限公司
0