4

我有一个没有索引的 100k 记录的表。我在用于左连接的列上创建了一个新索引。我需要重新索引我的表吗?

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

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

4

1 回答 1

6

一旦CREATE INDEX完成,索引就可以使用了。没有必要REINDEX在那之后跑。

REINDEX 文档页面

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

这意味着REINDEX行为类似于CREATEafter DROP

CREATE INDEX 文档页面

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

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

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

于 2014-12-23T12:06:39.870 回答