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)