为什么mysql在同一查询的2个不同服务器上显示2个不同的结果

时间:2014-04-21 21:35:56

标签: mysql sql database explain

我在两个不同的数据库(我的本地机器和我的生产机器)上运行相同的MySQL SQL语句。我本地机器上的那台运行速度更快,而生产的机器运行速度慢。以下是每个的EXPLAIN结果。

本地计算机 enter image description here

生产机器 enter image description here

如果我不需要,我宁愿不发布确切的查询。

我可以在2中区分的唯一区别是我的本地计算机运行的是5.6版,而生产服务器运行的是5.5。此外,我的服务器上的数据是3天,这是不是很多记录。具体来说,我正在查看解释的第2行,其中一个类型读取“ref”而另一个类型读取“ALL”,并且读取的行数超过28k。 2个结构之间的唯一区别是TimeModified字段,查询未使用该字段

2 个答案:

答案 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)

我首先把它作为评论,但我认为它也是答案: - )

您的表格结构可能相同,但您的数据可能不是。

表中的行数将影响执行计划。