order by 关键字的排序优化

2021-05-28  本文已影响0人  卫泽洪_70a7
ORDER BY 子句,尽量使用index方式排序,避免使用FileSort方式排序。
CREATE TABLE tblA ( id INT PRIMARY KEY NOT NULL auto_increment, age INT, birth TIMESTAMP NOT NULL )
insert into tblA(age,birth) values(22,NOW());
insert into tblA(age,birth) values(23,NOW());
insert into tblA(age,birth) values(24,NOW());
create index idx_A_ageBirth on tblA(age,birth);
explain select * from tblA wehre age > 20 ORDER BY age;

会不会产生FileSort?


image.png

2、

explain select * from tblA where age > 20 ORDER BY birth;
image.png

3、

explain select * from tblA where age > 20 ORDER BY birth,age;

4、

explain select * from tblA ORDER BY birth;
image.png

5、

explain select * from tblA ORDER BY age asc,birth desc;
image.png
由于单路是后出的算法,总体而言好过双路,但是用单路有问题:

在sort_buffer中,单路算法比多路算法要多占用更多空间,因为单路算法是把所有字段都取出,所以有可能取出的数据的总大小超出了sort_buffer的容量,导致每次只能取sort_buffer容量大小的数据,进行排序(创建tmp文件,多路合并),排完再去取sort_buffer容量大小,再排序。。。。从而多次I/O。
本来想省一次I/O操作,反而导致了大量的I/O操作,反而得不偿失。

优化策略
上一篇 下一篇

猜你喜欢

热点阅读