MySQL何时更新索引?

6

在更新/插入后,索引何时更新?是在更新/插入查询返回之前,还是在返回查询之后的某个时间点,或者是在使用索引的查询被执行时。

2个回答

5

索引更新分为两个部分。

第一部分是将条目插入/更新/删除到索引中。索引会在记录更改后立即更新,此过程会阻止查询直到完成。

这允许基于索引列的条件更快地检索记录,这是索引最常被理解的用途。

第二部分是更新索引的统计信息。这使优化器可以确定是否值得为给定的查询使用索引。想象一个查询,例如 SELECT * FROM users WHERE disabled = 0。假设大多数用户实际上是活跃的。如果索引统计信息是最新的,优化器将意识到表中的大多数记录将被查询返回,因此几乎需要扫描整个表。它可能会决定不使用索引并直接扫描表。

除非在非常特定的情况下,否则不会自动进行此更新(链接)。这些统计数据应该经常手动更新,使用 ANALYZE TABLE [table_name] 命令。


1

对于这个问题的答案是哪些条件会导致MySQL更新索引。我更感兴趣的是MySQL实际上是在什么时候更新索引,它是在插入操作期间,在返回客户端查询结果之前进行更新,还是在查询结束后的某个时间点进行更新,或者直到执行一个可以使用该索引的查询为止。 - snppla

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