mysql - 如果第一列是唯一的,是否会检查 ORDER BY 的第二列?

标签 mysql sql-order-by

我有这样的查询:

. . . ORDER BY col1, MAX(col2)

col1 在大多数情况下是唯一的,通常 col1 在所选行之间是不同的。我只想知道,当col1不同时,MAX(col2)会被执行吗?因为执行那个是没有用的。

让我换一种方式问我的问题:

. . . ORDER BY id, name

如您所知,id 是唯一的。在这种情况下,甚至会检查 name 吗?

最佳答案

要复杂得多。

我理解你的意思,是的,如果第一列已经是唯一的,则无需检查第二列,但从其他角度来看:

如果第一列已经是唯一的,为什么还要包括第二列?

无论如何,如果我们将排序想象成简单的迭代过程,这个逻辑是可行的,但正如 ORDER BY Optimization 中所描述的那样事实并非如此。

示例 1 - 。 . .按 col1、MAX(col2) 排序

对于这种情况,您在 SQL 的某处使用了 GROUP BY,优化指南建议如下:

By default, MySQL sorts all GROUP BY col1, col2, ... queries as if you specified ORDER BY col1, col2, ... in the query as well. If you include an explicit ORDER BY clause that contains the same column list, MySQL optimizes it away without any speed penalty, although the sorting still occurs.

示例 2 - 。 . .按 ID、名称排序

正如指南所建议的,这完全取决于您定义的索引:

In some cases, MySQL can use an index to satisfy an ORDER BY clause without doing extra sorting. The index can also be used even if the ORDER BY does not match the index exactly, as long as all unused portions of the index and all extra ORDER BY columns are constants in the WHERE clause.

要确保您的查询是如何工作的,只需使用 EXPLAIN SELECT ... ORDER BY 查看它是如何被处理的。

关于mysql - 如果第一列是唯一的,是否会检查 ORDER BY 的第二列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37534763/

相关文章:

mysql - 从mysql表中检索倒数第二条记录

mysql - 如何从mysql的列中查找不唯一的数量

mysql - 在 context.xml 中指定要用于 jdbc 的 SSL

mysql - 更新表条目告诉我该表在过程中不存在

mysql - sql - 有没有办法使用另一个 SELECT 查询来过滤 SELECT 查询的结果?

mysql - 使用 GROUP BY 和 ORDER BY 的 mysql 查询的奇怪结果

mysql - Coldfusion 查询结果基于相关表的查询结果

php - MYSQL PHP一次在多个列上检查一个like语句

sql - 如何在 SQL 查询中设置条件逻辑以调整优先级?

mysql - 添加命令后查询执行时间增加