MySQL/MariaDB 查询优化更改:子查询中的 Order By
使用 MySQL 5.5 或更早版本进行查询时,应用了子查询的 ORDER BY 子句在最外层查询的 SELECT 之前。然而,在 MariaDB 10.0.14 中,这种行为已经改变,当不存在 LIMIT 时,子查询 ORDER BY 子句现在将被忽略。
为了解决这个问题,MariaDB 建议将 ORDER BY 子句应用于最外层查询或使用子查询中的 LIMIT。
已记录行为
MariaDB 的文档指出,FROM 子句中的子查询是无序的行集,在此上下文中通常会忽略 ORDER BY 子句。以下文档中的引用提供了更多详细信息:
“根据 SQL 标准,“表”(以及 FROM 子句中的子查询)是一组无序的行。表中的行(或在 FROM 子句中的子查询中)不以任何特定顺序出现,这就是优化器可以忽略您指定的 ORDER BY 子句的原因。事实上,SQL 标准甚至不允许 ORDER BY 子句出现。这个子查询(我们允许它,因为 ORDER BY ... LIMIT ... 改变结果、行集,而不仅仅是它们的顺序)。”
因此,建议将子查询视为无序集并在最外层查询中放置 ORDER BY 子句或根据需要使用 LIMIT。
以上是MariaDB 对子查询中 ORDER BY 的处理发生了怎样的变化,推荐的解决方案是什么?的详细内容。更多信息请关注PHP中文网其他相关文章!