MySql那些事儿(六):你知道order by是怎么排序的吗?

本文探讨了MySQL中Order by语句的工作原理,包括rowid排序、优先队列排序及其适用场景。通过实例解析了全字段排序与限制排序(Limit M,N)的优化策略,并强调了正确设计索引和编写SQL的重要性。文章指出,通过创建合适的联合索引,有时可以避免排序操作,提高查询效率。
摘要由CSDN通过智能技术生成

作者:阿茂

从这一片开始我们就说一下平时是遇到的问题以及其原理解析,看到标题有没有朋友遇到过sql加了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;

我们的排序语句入下

select city,name,age from t where city='杭州' order by name ;

##全字段排序
作为一个优秀的crud程序员,为了避免全部扫描我们都会在city字段上建立索引,然后我们用explain来看看我们的执行计划

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4qUKgEdl-1575276181660)(…/resource/order%20by.png)]

Extra这个字段中的“Using filesort”表示的就是需要排序,MySQL会给每个线程分配一块内存用于排序,称为sort_buffer。
下面我们梳理下执行流程

  1. 初始化sort_buffer,确定放
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值