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/

相关文章:

php - 用于查找具有约束的三个表之间的关系的 MySQL 查询,即使该关系不存在

mysql - 如何在 mySql 中条件排序结果?

Mysql order by and group错误

sql - PostgreSQL - 按数组排序

php - 如何在 php 表格中添加滚动条?

MySQL 问题 - 警告 : mysql_num_rows() expects parameter 1 to be resource, bool 值给出

php - 带日期字段的按年排序 Mysql/PHP

MYSQL 使用 EBCDIC 代替 ASCII 进行排序

php - 从 mysql 读取和使用十进制数据类型时的数学问题

PHP - mySQL 查询问题