我有一个没有索引的 100k 记录的表。我在用于左连接的列上创建了一个新索引。我需要重新索引我的表吗?
创建索引需要几毫秒。所以我猜在我重新索引我的表之前,查询不能使用这个索引(没有数据)(如果我有其他索引,我只会重新索引索引 - 我阅读了手册)。
新索引填充数据时找不到任何信息?这是自动完成的吗?什么时候?
我有一个没有索引的 100k 记录的表。我在用于左连接的列上创建了一个新索引。我需要重新索引我的表吗?
创建索引需要几毫秒。所以我猜在我重新索引我的表之前,查询不能使用这个索引(没有数据)(如果我有其他索引,我只会重新索引索引 - 我阅读了手册)。
新索引填充数据时找不到任何信息?这是自动完成的吗?什么时候?
一旦CREATE INDEX
完成,索引就可以使用了。没有必要REINDEX
在那之后跑。
从REINDEX
文档页面:
REINDEX 类似于索引的删除和重新创建,因为索引内容是从头开始重建的。然而,锁定的考虑是相当不同的。REINDEX 锁定索引的父表的写入但不读取。
这意味着REINDEX
行为类似于CREATE
after DROP
。
从CREATE INDEX
文档页面:
创建索引可能会干扰数据库的常规操作。通常 PostgreSQL 会锁定要索引的表以防止写入,并通过对表的单次扫描来执行整个索引构建。其他事务仍然可以读取该表,但如果它们尝试插入、更新或删除表中的行,它们将阻塞,直到索引构建完成。
我认为这清楚地解释了创造意味着索引。
但是,特定查询是否使用索引取决于许多不同的事情。如果您的查询不使用索引,您需要发布查询、表定义(例如作为create table
语句)、您定义的索引和explain (analyze, verbose)
查询的输出。