我在两个不同的数据库(我的本地机器和我的生产机器)上运行相同的MySQL SQL语句。我本地机器上的那台运行速度更快,而生产的机器运行速度慢。以下是每个的EXPLAIN结果。
本地计算机
生产机器
如果我不需要,我宁愿不发布确切的查询。
我可以在2中区分的唯一区别是我的本地计算机运行的是5.6版,而生产服务器运行的是5.5。此外,我的服务器上的数据是3天,这是不是很多记录。具体来说,我正在查看解释的第2行,其中一个类型读取“ref”而另一个类型读取“ALL”,并且读取的行数超过28k。 2个结构之间的唯一区别是TimeModified字段,查询未使用该字段
答案 0 :(得分:2)
在MySQL 5.5及更早版本中,派生表从不具有索引。访问派生表的唯一方法是通过完全扫描。 (这是您在5.5服务器的EXPLAIN输出中看到的 ALL
。)
使用MySQL 5.6.3,MySQL可以向派生表添加索引,从而提高性能。 (请注意5.6服务器的EXPLAIN输出中索引的名称: <auto_key1>
。
参考:https://dev.mysql.com/doc/refman/5.6/en/subquery-optimization.html
答案 1 :(得分:0)
我首先把它作为评论,但我认为它也是答案: - )
您的表格结构可能相同,但您的数据可能不是。
表中的行数将影响执行计划。