作者:阿茂
从这一片开始我们就说一下平时是遇到的问题以及其原理解析,看到标题有没有朋友遇到过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。
下面我们梳理下执行流程
- 初始化sort_buffer,确定放