创建索引永远在postgres上

时间:2016-12-28 17:40:12

标签: postgresql indexing

我试图使用btree索引创建整数列的索引,但它需要永远(超过2小时!)。 该表有17.514.879行。我没想到要花很长时间。

差不多2.5小时后,与数据库的连接就死了。当我重新连接到它时,索引就在那里,但我不知道这个索引有多好。

如何确保索引没有被连接丢失搞乱?

1 个答案:

答案 0 :(得分:9)

如何检查索引是否正常

通过psql连接到数据库并运行\d table_name(其中table_name是您的表的名称)。例如:

grn=# \d users
            Table "public.users"
 Column |          Type          | Modifiers
--------+------------------------+-----------
 name   | character varying(255) |
Indexes:
    "users_name_idx" btree (name)

您将看到表架构下方列出的索引。如果索引已损坏,则会将其标记为。

如何在不锁定整个表的情况下创建索引

您可以以不锁定整个表但甚至更慢的方式创建索引。为此,您需要将CONCURRENTLY添加到CREATE INDEX。例如:

CREATE INDEX CONCURRENTLY users_name_idx ON users(name);

如何修复损坏的索引

如果索引已损坏,您可以删除它并重新创建CONCURRENTLY或使用REINDEX INDEX index_name。例如:

REINDEX INDEX users_name_idx

将重新创建users_name_idx