MySQL45讲 【orderby是怎么工作的?】 笔记

Extra 字段中的 Using filesort 表示需要排序.
MySQL 会给每个线程分配一块内存用于排序,称为 sort_buffer

CREATE TABLE `t` (
`id` int(11) NOT NULL,
`city` varchar(16) NOT NULL,
`name` varchar(16) NOT NULL,
PRIMARY KEY (`id`),
KEY `city` (`city`)
) ENGINE=InnoDB;

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

全字段排序
把符合条件的行的查询字段都存入sort_buffer中,再对sort_buffer中的数据按order by字段做快速排序.

rowid排序
max_length_for_sort_data,是 MySQL 中专门控制用于排序的行数据的长度的一个参数。它的意思是,如果单行的长度超过这个值,MySQL 就认为单行太大,要换一个算法。
新的算法放入 sort_buffer 的字段,只有要排序的列(即 name 字段)和主键 id。

如果内存够,就要多利用内存(使用全字段排序),尽量减少磁盘访问(rowid排序).

使用索引,避免排序

select city,age from t where city='杭州' order by name limit 1000;
index(city,name) 索引已按照name字段排好序
inde(city,name,age) 使用索引覆盖,避免回表

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值