优化命令如何改变解释

How does optimize command change the explain

想请教一个关于数据库中索引和优化原理的问题

我正在使用 mysql。模式引擎是 myisam。在一个查询中,解释结果显示 table 中有 8000 多行索引良好。然后同事在这个table中使用了命令'optimize table'。在那之后,解释显示了 2 行看起来是正确的。结果是好的,但我们都不太明白到底发生了什么,为什么。

我是这方面的新手。那么谁能帮忙解释一下这个 'explain' 和索引在优化后是如何发生显着变化的呢?在我们优化 table.

之前,我认为索引应该足够好

非常感谢!

这都是关于索引中的“数据分布”。随着时间的流逝和记录的增加,一个索引可能会变得比另一个更适合。你显然需要一个例子:

假设您有一个 table,其中包含 last_namecity 字段以及每个字段的索引。如果您使用两个字段进行搜索,例如 WHERE last_name='jones' and city='here',那么可能会使用任何索引 ,它们是相等的。一旦选择了一个,就会对第二个字段进行缓慢的搜索。

现在,随着时间的推移,city 可能开始表现出比名称少得多的可变性。因此,对两者进行搜索可能表明 city 将产生太多记录以进行第二次筛选,而 last_name 可能是一个较小的集合,因此速度更快。

Optimize 将检测此分布并提示使用 last_name 优先于 city 更多数据和时间。

希望这是清楚的...

您可以在此处阅读有关优化 TABLE 的手册:https://dev.mysql.com/doc/refman/5.7/en/optimize-table.html

For MyISAM tables, OPTIMIZE TABLE works as follows:

  1. If the table has deleted or split rows, repair the table.

  2. If the index pages are not sorted, sort them.

  3. If the table's statistics are not up to date (and the repair could not be accomplished by sorting the index), update them.

这是对您的情况最有用的最后一步。这与 ANALYZE TABLE 执行的工作相同。在此处详细了解它的作用:https://dev.mysql.com/doc/refman/5.7/en/analyze-table.html

OPTIMIZE TABLE 和 ANALYZE TABLE 在使用 InnoDB 时做完全不同的事情。阅读文档以了解更多信息。