Fork me on GitHub

mysql5.7中子查询排序不生效

mysql5.7中子查询排序不生效的问题

原因:在mysql5.7中,如果不加limit,系统会把order by优化掉。
在mysql5.7手册的8.2.2.1中有解释:

子查询的优化是使用半连接的策略完成的(The optimizer uses semi-join strategies to improve subquery execution)

使用半连接进行优化,子查询语句必须满足一些标准(In MySQL, a subquery must satisfy these criteria to be handledas a semi-join)。

其中一个标准是:必须不是一个包含了limit和order by的语句(It must not have ORDER BY with LIMIT.)

错误写法

SELECT a. FROM ( SELECT FROM xxx WHERE groupId = 11
ORDER BY effectiveDate desc ) a GROUP BY a.groupId

正确写法

SELECT a. FROM ( SELECT FROM xxx WHERE groupId = 11 ORDER BY effectiveDate desc limit 111111111) a GROUP BY a.groupId