如图所示,通常情况下,这个语句的流程如下
初始化sort_buffer,确定放入name,city,age这三个字段
从索引中找到第一个杭州的主键id
然后到主键id取出整行(name,age,city...图中nama的排序有可能在内存中完成,也就可能使用外部排序,这个取决于所需的内存和参数sort_buffer_size
sort_buffer_size,就是Mysql为排序开辟的内存的大小,如果排序的数据量小于...sort_buffer_size,排序就在内存中排序,如果大于内存大小,就会使用磁盘的临时文件辅助排序,
我们可以使用下面方法,来确定一个排序语句是否使用了临时文件
/* 打开optimizer_trace...新的算法放入sort_buffer的字段,只需要排序的列和主键id,但是这个时候,并不能直接返回排序的结果,而是要回表查询整行。...初始化sort_buffer,确定放入两个字段,即name和id
从索引city中找到第一个满足的条件主键id
再到主键id索引中获取整行,取出name,id两个字段,存入sort_buffer
在从索引