在PostgreSQL中,如何判断表的每个索引是否聚集?

时间:2018-07-09 01:17:59

标签: postgresql

在PostgreSQL中,如何判断表的每个索引是否聚簇?

这与In MySQL, how can we tell if an index of a table is clustered or not?

对应

谢谢。

1 个答案:

答案 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:的文档

  

对表进行群集时,将根据索引信息对表进行物理重新排序。群集是一项一次性操作:表在随后进行更新时,更改不会被群集。也就是说,没有尝试根据新的或更新的行的索引顺序来存储它们。