6

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

4

2 回答 2

5

索引更新是双重的。

第一部分是在索引中插入/更新/删除条目。一旦记录发生更改,索引就会更新,并且此过程会阻止查询直到完成。

这允许基于索引列上的条件更快地检索记录,这是索引最容易理解的目的。

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

除非在非常特殊的情况下,此更新不会自动发生。这些统计数据应定期手动更新ANALYZE TABLE [table_name]

于 2013-06-24T18:40:20.763 回答
1

您可能需要参考以下链接,我发现这些链接对您的问题有帮助:

  1. 关于stackoverflow的这个问题
  2. 此链接来自 mysqlperformanceblog
  3. 这篇来自 DBA Stackexchange 论坛的帖子
于 2013-06-24T18:13:49.767 回答