在一个大的Postgresql表上创建索引需要多长时间?

20

我有一个包含2600万行数据的Postgres表,我想添加一个带索引的布尔类型列。

在生产环境中尝试之前,是否有一种方法可以计算这种类型的操作需要多长时间?


3
为什么要对一个布尔列建立索引?由于布尔类型仅有两个选项——真/假,所以这并不会大幅提高性能,相较于一些独特程度较高的数据类型通过建立索引可以获得更好的效果。 - mituw16
我想仅对布尔列进行索引,因为我认为这样做会提高性能。您是否有任何资源或链接,可以说明(1)在布尔列上创建索引不会提高性能,或者(2)如何知道索引是否有帮助? - Carolyn Conway
1
这段针对mysql的内容,但同样适用于其他数据库。通过给布尔列建立索引,几乎不会显著提高查询速度。参考链接:https://dev59.com/JXI-5IYBdhLWcg3wc4Cw#1845014 还有一个类似的解释:https://dev59.com/v2kv5IYBdhLWcg3wiRWo#10524734 - mituw16
1
嗨,Carolyn,最终你是否进行了这个索引创建?如果是,需要多长时间? - Scary Wombat
如果我没记错的话,我想它只需要一两分钟就能运行完。不幸的是,我仍然没有找到一个好的方法来提前估计这种情况 ¯_(ツ)_/¯ - Carolyn Conway
我在一个char字段上创建了一个唯一索引(postgres aurora 10.14),处理24m行数据大约花费了4分钟。 - Matthew Hegarty
1个回答

13

无法计算索引时间,因为它取决于许多因素(硬件、软件、配置、负载等)。

好消息是你可以CREATE INDEX CONCURRENTLY,虽然这需要更长的时间,但不会锁定表格。 因此,操作除了服务器负载增加之外没有任何副作用。

有一些注意事项,请查看文档


谢谢!好知道。 - Carolyn Conway

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接