MySQL与MariaDB对嵌套的查询语句当中的order by的处理方法不同。MySQL会忠实执行内层查询的排序子句,但是MariaDB会将这个order by去掉,理论依据就是关系理论 --- 一个表是行的集合,因此没有顺序要求。由于嵌套的查询语句是外层查询的数据表,因此可以以任何顺序提供给外层查询。如果在内层查询语句中不仅有order by,还有limit子句,那么这时这个order by是不会被MariaDB忽略的,因为此时的行的顺序会决定哪些行会返回给外层查询。
后来我试验了一下,改SQL语句,把原来的子查询中存在order by的放到外面,也就是让order by起作用,结果一个DB2执行几秒的SQL语句,MariaDB居然执行了
12分钟!12分钟!12分钟。 我该建的索引都建了。