一 、sort_buffer_size
本文先介绍一下优化order by不是索引排序列的内存缓存参数sort_buffer_size
当我们根据l_discount 排序lineitem表时,
select * from lineitem order by l_discount DESC limit 10000;
我们发现会执行执行了39.11S
这时候 我们通过 show status like '%sort%' ; show tatus 命令跟我们的show variables 有区别的,show variables是查看mysql中的配置参数,show tatus是查看mysql中的状态数。清空status状态的值用 flush status;
sort_merge_passes
mysql官方解析
这个值简单来说就是,我们的排序都是把数据从硬盘取出来后放到内存进行排序,可能内存大小不够,需要从硬盘来回取出合并,这里就是指的这个合并次数。 上面讲的内存大小就是sort_buffer_size的大小。所以当我们的sort_merge_passes的值偏大的时候,就需要把sort_buffer_size调大。所以我们需要在配置文件配置 sort_buffer_size即可。
当我们配置以后执行上面的sql的时间18S, sort_merge_passes = 0;