【问题标题】:Index creation taking forever on postgres索引创建永远在 postgres 上
【发布时间】:2016-12-28 17:40:11
【问题描述】:

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

大约 2.5 小时后,与数据库的连接刚刚断开。重连的时候索引还在,不知道这个索引好不好。

如何确定索引没有因连接丢失而混乱?

【问题讨论】:

标签: postgresql indexing


【解决方案1】:

如何检查索引是否正常

通过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

【讨论】:

    猜你喜欢
    • 2018-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-29
    • 2018-06-25
    • 2014-09-07
    • 2015-03-14
    相关资源
    最近更新 更多