优化命令如何改变解释

时间:2017-09-28 01:58:49

标签: mysql indexing sql-execution-plan explain

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

我正在使用mysql。架构引擎是myisam。在一个查询中,解释结果显示表中已有8000多行已编入索引。然后我的同事在此表中使用了“优化表”命令。之后解释显示2行看起来正确。结果很好,但我们俩并不真正了解真正发生的事情以及原因。

我是这个领域的新人。所以任何人都可以帮助解释优化后这种“解释”和指数如何显着改变?在我们优化表之前,我认为索引应该足够好。

非常感谢!

2 个答案:

答案 0 :(得分:0)

所有关于" 数据分发"在索引中。随着时间的推移和记录的增加,一个索引可能会变得更适合另一个索引。你显然需要一个例子:

我们假设您有一个包含last_namecity字段的表格以及每个字段的索引。如果您搜索了两个字段,例如WHERE last_name='jones' and city='here',则可以使用任何 索引,它们都是相同的。选择一个,然后对第二个字段进行慢速搜索。

现在随着时间的推移,city可能会开始显示比名称更少的可变性。因此,对两者的搜索可能表明city将产生过多记录以作为第二遍过滤,其中last_name可能是较小的集合,因此更快。

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

希望这很清楚......

答案 1 :(得分:0)

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

  

对于MyISAM表,OPTIMIZE TABLE的工作方式如下:

     
      
  1. 如果表已删除或拆分行,请修复表。

  2.   
  3. 如果未对索引页面进行排序,请对它们进行排序。

  4.   
  5. 如果表的统计信息不是最新的(修复可以   不能通过对索引进行排序来完成,更新它们。

  6.   

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

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