【问题标题】:PostgreSQL - reindex when add new indexPostgreSQL - 添加新索引时重新索引
【发布时间】:2014-12-23 11:25:16
【问题描述】:

我有一个包含 10 万条记录的表,没有索引。我在用于左连接的列上创建了一个新索引。 我需要重新索引我的表吗?

创建索引需要几毫秒。所以我猜在我重新索引我的表之前,查询不能使用这个索引(没有数据)(如果我有其他索引,我只会重新索引索引 - 我阅读了手册)。

新索引填充数据时找不到任何信息?这是自动完成的吗?什么时候?

【问题讨论】:

    标签: postgresql indexing reindex


    【解决方案1】:

    一旦CREATE INDEX 完成,索引就可以使用了。之后就不需要运行REINDEX了。

    来自REINDEXdocumentation page

    REINDEX 类似于索引的删除和重新创建,因为索引内容是从头开始重建的。然而,锁定的考虑是相当不同的。 REINDEX 锁定索引的父表的写入但不读取。

    这意味着REINDEXDROP 之后的行为类似于CREATE

    CREATE INDEXdocumentation page:

    创建索引可能会干扰数据库的常规操作。通常 PostgreSQL 会锁定要索引的表以防止写入,并通过对表的单次扫描来执行整个索引构建。其他事务仍然可以读取该表,但如果它们尝试在表中插入、更新或删除行,它们将阻塞,直到索引构建完成。

    我认为这清楚地解释了创建意味着索引。

    特定查询是否使用索引取决于许多不同的事情。如果您的查询不使用索引,您需要发布查询、表定义(例如作为create table 语句)、您定义的索引以及查询的explain (analyze, verbose) 的输出。

    【讨论】:

    • 这对我来说听起来不合逻辑,这就是我问这个问题的原因。数据库必须在某个点遍历数据并以适当的顺序定位记录。这不能凭直觉完成(我认为)?
    • @Makla:使用体面的硬件在这么小的表上构建索引几毫秒听起来是合理的。相信我:当create index 语句完成时,索引完全构建并准备就绪。
    猜你喜欢
    • 2020-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多