在PostgreSQL中,如何判断表的每个索引是否聚簇?
这与In MySQL, how can we tell if an index of a table is clustered or not?
对应谢谢。
答案 0 :(得分:0)
Postgres不像MySql那样支持聚簇索引。可能有一个用于聚集表的索引。您可以通过查询系统目录pg_index.
中的列indisclustered
进行检查
不公开-如果为true,则表最后聚集在该索引上
示例:
create table my_table(id serial primary key, str text unique);
select relname, indisclustered
from pg_index i
join pg_class c on c.oid = indexrelid
where indrelid = 'public.my_table'::regclass
relname | indisclustered
------------------+----------------
my_table_str_key | f
my_table_pkey | f
(2 rows)
cluster my_table using my_table_str_key;
select relname, indisclustered
from pg_index i
join pg_class c on c.oid = indexrelid
where indrelid = 'public.my_table'::regclass
relname | indisclustered
------------------+----------------
my_table_str_key | t
my_table_pkey | f
(2 rows)
阅读有关CLUSTER:的文档
对表进行群集时,将根据索引信息对表进行物理重新排序。群集是一项一次性操作:表在随后进行更新时,更改不会被群集。也就是说,没有尝试根据新的或更新的行的索引顺序来存储它们。