美文网首页
mysql之order by

mysql之order by

作者: 每天进步一点点变成更好的自己 | 来源:发表于2022-04-12 13:36 被阅读0次

order by就是排序。

--创建表
CREATE TABLE `t` (
  `id` int(11) NOT NULL,
  `city` varchar(16) NOT NULL,
  `name` varchar(16) NOT NULL,
  `age` int(11) NOT NULL,
  `addr` varchar(128) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `city` (`city`)
) ENGINE=InnoDB;

--排序查询
Extra 这个字段中的“Using filesort”表示的就是需要排序,MySQL 会给每个线程分配一块内存用于排序,称为 sort_buffer。
排序查询命令查看:explain select city,name,age from t where city='杭州' order by name limit 1000 ;

rowid排序
1、初始化 sort_buffer,确定放入两个字段,即 name 和 id;
2、从索引 city 找到第一个满足 city='杭州’条件的主键 id,也就是图中的 ID_X;
3、到主键 id 索引取出整行,取 name、id 这两个字段,存入 sort_buffer 中;
4、从索引 city 取下一个记录的主键 id;
5、重复步骤 3、4 直到不满足 city='杭州’条件为止,也就是图中的 ID_Y;
6、对 sort_buffer 中的数据按照字段 name 进行排序;
7、遍历排序结果,取前 1000 行,并按照 id 的值回到原表中取出 city、name 和 age 三个字段返回给客户端。

rowid排序:


image.png

全字段排序
通常情况下,这个语句执行流程如下所示 :
1、初始化 sort_buffer,确定放入 name、city、age 这三个字段;
2、从索引 city 找到第一个满足 city='杭州’条件的主键 id,也就是图中的 ID_X;
3、到主键 id 索引取出整行,取 name、city、age 三个字段的值,存入 sort_buffer 中;
4、从索引 city 取下一个记录的主键 id;
5、重复步骤 3、4 直到 city 的值不满足查询条件为止,对应的主键 id 也就是图中的 ID_Y;
6、对 sort_buffer 中的数据按照字段 name 做快速排序;
7、按照排序结果取前 1000 行返回给客户端。
city字段的索引图:

image.png
全字段排序:
image.png

相关文章

  • MySQL之order by

    在mysql里面,order by有两种实现方式,一种是利用有序索引获取有序数据,另一种则是通过相应的排序算法,将...

  • mysql之order by

    order by就是排序。 --排序查询Extra 这个字段中的“Using filesort”表示的就是需要排序...

  • 你的Order By执行起来为什么这么这么慢

    MySQL order by 执行流程 在工作中使用order by再平常不过了,但是对于mysql order ...

  • MySQL之ORDER BY同一个字段,不同值排序

    MySQL之ORDER BY同一个字段,不同值排序 通常情况下,在MySQL中我们可以使用ORDER BY对一个或...

  • MySQL 之ORDER BY FIELD

    在使用MySQL的排序时,可能需要根据某个字段取值的特定顺序来进行排序。此时,我们就可以使用ORDER BY FI...

  • mysql:group by,order by

    mysql:group by,order by order by order by是用于支持字段的关键字 表结构如...

  • 维表join

    kafka topic为order中数据格式 mysql order_detail表ddl order_detai...

  • 常用的语句

    更新:order误用order 是mysql的关键字,是用来排序的,oreder by desc;使用order做...

  • Mysql | order by

    在开发应用的时候,一定会经常碰到需要根据指定的字段排序来显示结果的需求,例如下列的sql select city,...

  • MySQL - order by

    实验例子 市民表 假设你要查询城市是“杭州”的所有人名字,并且按照姓名排序返回前 1000 个人的姓名、年龄。SQ...

网友评论

      本文标题:mysql之order by

      本文链接:https://www.haomeiwen.com/subject/vrausrtx.html