更新/插入后究竟何时更新索引?是在更新/插入查询返回之前,是在查询返回之后的某个时间,还是在执行使用索引的查询时。
问问题
6674 次
2 回答
5
索引更新是双重的。
第一部分是在索引中插入/更新/删除条目。一旦记录发生更改,索引就会更新,并且此过程会阻止查询直到完成。
这允许基于索引列上的条件更快地检索记录,这是索引最容易理解的目的。
第二部分是更新索引的统计信息。这允许优化器确定对于给定的查询是否值得使用索引。想象一个像SELECT * FROM users WHERE disabled = 0
. 假设大多数用户实际上是活跃的。如果索引统计信息是最新的,优化器将意识到表中的大多数记录将由查询返回,几乎整个表都需要扫描。它可能会决定不使用索引并立即扫描表。
除非在非常特殊的情况下,此更新不会自动发生。这些统计数据应定期手动更新ANALYZE TABLE [table_name]
于 2013-06-24T18:40:20.763 回答