order by 优化
优化内容
- 通过添加合适索引
- 去掉不必要的返回字段
介绍:表结构中 d字段未添加索引 c字段添加索引 a,b字段为复合索引
举例如下:
①添加索引的方式优化
explain select d,id from t1 order by d;
Extra:Using filesort
添加索引后:
explain select c,id from t1 order by c;
Extra:Using index
由上所得可以在排序字段上添加索引来优化排序语句。
②多个字段排序的优化工作
explain select id,a,c from t1 order by a,c;
Extra:Using filesort
explain select id,a,b from t1 order by a,b;
Extra:Using index
因此,如果多个字段排序,可以在多个排序字段上添加联合索引来优化排序语句。
③先等值查询再排序的优化
explain select id,a,d from t1 where a=1000 order by d;
Extra:Using filesort
explain select id,a,b from t1 where a=1000 order by b;
Extra:Using index
因此,对于先等值查询再排序的语句,可以通过在条件字段
和排序字段
添加联合索引
来优化此类排序语句。
④去掉不必要的返回字段
select * from t1 order by a,b; /* 根据a和b字段排序查出所有字段的值 */
Extra:Using filesort
select id,a,b from t1 order by a,b; /* 根据a和b字段排序查出id,a,b字段的值 */
Extra:Using index
原因:在检索所有数据时 扫描整个索引并查找到没索引的行的成本比扫描全表的成本更高,所以优化器放弃使用索引。
网友评论