我想问一个关于数据库中索引和优化原理的问题。
我正在使用mysql。架构引擎是myisam。在一个查询中,解释结果显示表中已有8000多行已编入索引。然后我的同事在此表中使用了“优化表”命令。之后解释显示2行看起来正确。结果很好,但我们俩并不真正了解真正发生的事情以及原因。
我是这个领域的新人。所以任何人都可以帮助解释优化后这种“解释”和指数如何显着改变?在我们优化表之前,我认为索引应该足够好。
非常感谢!
答案 0 :(得分:0)
所有关于" 数据分发"在索引中。随着时间的推移和记录的增加,一个索引可能会变得更适合另一个索引。你显然需要一个例子:
我们假设您有一个包含last_name
和city
字段的表格以及每个字段的索引。如果您搜索了两个字段,例如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的工作方式如下:
如果表已删除或拆分行,请修复表。
如果未对索引页面进行排序,请对它们进行排序。
- 醇>
如果表的统计信息不是最新的(修复可以 不能通过对索引进行排序来完成,更新它们。
这是您案例中最有用的最后一步。这与ANALYZE TABLE执行的工作相同。详细了解此处的内容:https://dev.mysql.com/doc/refman/5.7/en/analyze-table.html
使用InnoDB时,OPTIMIZE TABLE和ANALYZE TABLE都做了完全不同的事情。阅读文档以了解更多信息。