Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
5.5中的MySQL长时间运行查询在5.6中速度非常快_Mysql - Fatal编程技术网

5.5中的MySQL长时间运行查询在5.6中速度非常快

5.5中的MySQL长时间运行查询在5.6中速度非常快,mysql,Mysql,我有一个复杂的数据库模式。 我在MySQL 5.6中构建了一个连接20个表的大查询。 当我在Mac上对MySQL 5.6的本地副本运行查询时,我得到了1-2毫秒的响应时间。 当我在Ubuntu上的mysql 5.5上运行相同的查询(通过mysql转储使用相同的数据)时,我得到了60秒的响应时间。 我对慢速查询进行了评测,发现几乎整整60秒都花在了“统计”阶段。“统计”阶段显然是MySQL决定如何最好地执行所有连接的阶段 MySQL 5.6如何在毫秒内完成这项工作,而在5.5中需要整整一分钟 关于

我有一个复杂的数据库模式。 我在MySQL 5.6中构建了一个连接20个表的大查询。 当我在Mac上对MySQL 5.6的本地副本运行查询时,我得到了1-2毫秒的响应时间。 当我在Ubuntu上的mysql 5.5上运行相同的查询(通过mysql转储使用相同的数据)时,我得到了60秒的响应时间。 我对慢速查询进行了评测,发现几乎整整60秒都花在了“统计”阶段。“统计”阶段显然是MySQL决定如何最好地执行所有连接的阶段

MySQL 5.6如何在毫秒内完成这项工作,而在5.5中需要整整一分钟

关于首先解决什么问题有什么想法吗?

MySQL 5.6(和MariaDB)优化器在子查询和连接方面做得更好。我猜您的查询在5.5中没有得到很好的优化。运行:

EXPLAIN SELECT ...
在这两个MySQL版本上,了解MySQL应该做什么,以及在5.5中真正做什么。然后,尝试强制使用5.6使用的索引

编辑:如果是子查询,可以将其重写为联接。MySQL 5.6在某些情况下会在内部执行此操作。

MySQL 5.6(和MariaDB)优化器在子查询和连接方面做得更好。我猜您的查询在5.5中没有得到很好的优化。运行:

EXPLAIN SELECT ...
在这两个MySQL版本上,了解MySQL应该做什么,以及在5.5中真正做什么。然后,尝试强制使用5.6使用的索引


编辑:如果是子查询,可以将其重写为联接。MySQL 5.6在某些情况下会在内部执行此操作。

经过几个小时的研究,我自己找到了一个解决方案。 我只是在SELECT之后添加了STRIGHT_JOIN子句,神奇的是,我在MySQL 5.5上的60秒查询现在缩短到了3毫秒

所以MySQL5.6对我的大查询没有问题,但MySQL5.5有问题。所以我猜联接优化器把表顺序搞砸了


使用STRAIGHT_JOIN强制MySQL按照查询中指定的顺序读取表,并绕过联接优化器。

经过几个小时的搜索,我自己找到了一个解决方案。 我只是在SELECT之后添加了STRIGHT_JOIN子句,神奇的是,我在MySQL 5.5上的60秒查询现在缩短到了3毫秒

所以MySQL5.6对我的大查询没有问题,但MySQL5.5有问题。所以我猜联接优化器把表顺序搞砸了


使用STRAIGHT_JOIN强制MySQL按照查询中指定的顺序读取表,并绕过联接优化器。

您能否提供更多信息,如您在这两个数据库上使用了什么
引擎?或者您的电脑的规格?也许只有这一点你才能找到原因。你的mysql服务器的配置完全相同吗?你能给我们提供更多信息,比如你在两个数据库上都使用了什么
引擎吗?或者您的电脑的规格?也许只有在那里你才能找到原因。你的mysql服务器的配置完全相同吗?