时间:2021-07-01 10:21:17 帮助过:35人阅读
旧:读取行指针和需要排序的字段,对其 进行排序,然后在根据排序结果读取所需要的行
新:先读取查询所需要的所有的列,然后再根据给定列进行排序,最后直接返回排序结果
比较:
优点:只需要一次顺序IO,比起两次IO(其中还有一次随机IO)有了很大优势
缺点:引入很多无用的列,白白占用着内存,对排序无影响
对每一个排序记录都会分配一个足够长的定长空间来存放,有时排序占用的空间比数据存储占用的空间还要多
对于关联查询来数order by子句中所有的列都来自于第一个表,那么MySQL在关联第一张表的时候就进行文件排序(Extra中可看到Using Filesort)
否则会先将关联的结果放到临时表中,然后在所有表都关联完成后再进行文件排序,5.6版本之后可以将Limit提前执行,避免了排序大量的数据到最后只需要很少的尴尬处境
MySQL查询优化
标签:mysql 查询优化