创建索引永远在postgres上

Ale*_*vsk 4 postgresql indexing

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

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

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

Gre*_*vis 11

如何检查索引是否正常

通过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)
Run Code Online (Sandbox Code Playgroud)

您将看到表模式下面列出的索引.如果索引已损坏,则会将其标记为如此.

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

您可以创建在不锁定整个表,但一个方法的指数甚至更慢.要做到这一点,你需要添加CONCURRENTLYCREATE INDEX.例如:

CREATE INDEX CONCURRENTLY users_name_idx ON users(name);
Run Code Online (Sandbox Code Playgroud)

如何修复腐败指数

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

REINDEX INDEX users_name_idx
Run Code Online (Sandbox Code Playgroud)

将重新创建users_name_idx.