MySQL-order by

1、从一个简单的排序需求说起

sort buffer

1、为了排序开辟的内存大小。多个线程,多个buffer

2、是server层的概念

3、通过参数进行设置大小限制。

https://dev.mysql.com/doc

 

全字段排序

 

1、初始化内存,确定放入name,city,age

2、city是二级索引,找到第一个条件的主键ID

3、到主key,取出整行,取3个字段存入sort_buffer

4、city取下一个记录的主key

5、重复3、4

6、对sort_buffer安装字段name做快速排序

7、按照排序结果前1000行返回给客户端。

 

show variables like "sort_buffer_sizes';

 

1、内存中排序,外部磁盘排序。

2、using filesort

3、optimizer_trace 

归并排序

全字段排序面临的问题

1、单条记录数据很大,sort_buffer的记录数就很少。

解决办法:

1、将大值,放到另一个表中

2、rowid 排序。

sort字段,是存储表定义的长度

addon字段,是按实际长度存储。

 

内存先行,磁盘为辅。

mongoDB, 分布式方式,归并方式。

 

覆盖索引,(city, name, age)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值