2024-11-09  阅读(1)
版权声明:本文为博主付费文章,严禁任何形式的转载和摘抄,维权必究。 本文链接:https://www.skjava.com/mianshi/baodian/detail/1351278193

回答

order by子句对查询结果进行排序,确保返回结果集按照指定列或表达式的升序或降序排列。

查询 SQL 中有order by子句并不一定会执行排序。判断语句是否执行了排序可查看执行计划中的 Extra 字段。如果该字段存在Using filesort则说明执行了排序操作,反之则没有执行排序操作。如下:

mysql> explain SELECT * from t_user where age =  10 ORDER BY name desc;
+----+-------------+--------+------------+------+---------------+---------+---------+-------+------+----------+----------------+
| id | select_type | table  | partitions | type | possible_keys | key     | key_len | ref   | rows | filtered | Extra          |
+----+-------------+--------+------------+------+---------------+---------+---------+-------+------+----------+----------------+
|  1 | SIMPLE      | t_user | NULL       | ref  | idx_age       | idx_age | 4       | const |    3 |   100.00 | Using filesort |
+----+-------------+--------+------------+------+---------------+---------+---------+-------+------+----------+----------------+

Order By 执行流程

1、根据 SQL 条件过滤数据,如上 SQL 会把age = 10之外的数据先过滤。

2、将符合条件的结果集放到 sort_buffer(sort_buffer 在内存)。

3、在 sort buffer 里根据name字段对数据排序。

4、将排序结果返回给客户端。

其中sort_buffer是 MySQL 为每个线程分配的一块用于排序的内存。可以通过sort_buffer_size参数设置其大小。