我在MySQL 5.6中构建了一个连接20个表的大型查询。当我在Mac5.6的本地副本上运行查询时,我得到了1-2毫秒的响应时间。当我在Ubuntu上的mysql 5.5上运行相同的查询(通过MySQL转储使用相同的数据)时,我得到了60秒的响应时间。我对缓慢的查询运行了分析,发现几乎整个60秒都花在了“统计”阶段。“统计”阶段显然是MySQL决定如何最好地执行所有连接的阶段。
MySQL 5.6如何在毫秒内执行此操作,而5.5则需要
我知道我可以通过使用FORCE INDEX (abc)关键字来更改MySQL执行查询的方式。但是有没有办法改变执行顺序呢?如果我在这条语句上运行explain,我会看到mysql首先开始查询c。(我已经证明了这一点),有没有办法告诉mysql使用特定的顺序?上面的查询耗时1.9秒完成,并返回7行。是used)关键是mysql应该开始查询表a,并按照c的方式工作,而不是反过来。
我在MySQL 5.5 (或以前的版本)中使用以下查询多年,没有任何问题:
SELECT t2.Code from (select Country.Code from Country order by上周,我刚刚迁移到一个新的MySQL版本(实际上,我迁移到了MariaDB 10.0.14),现在使用相同数据库的相同查询不再降序排序。它是按升序排序的(或者按自然顺序排序,实际上并不确定)。那么,谁能告诉我这是一个bug,还是最近版本的MySQL/MariaDB的行为发生了变化?
我正在执行一个子查询,其中有一个包含随机数生成的计算列。在基本查询中,我选择了该列两次。MySQL 5.6和我预期的一样工作,计算值被调用一次并固定下来。5.7+/8.0+的执行似乎重新评估了每个选择的子查询的列值。这行为正确吗?我能做些什么来强制它在新版本的MySQL中按预期工作呢?id AS i, FROM t
) q;