mysql优化解决Using filesort性能问题
日期:2020-01-25
来源:程序思维浏览:4738次
使用了GROUP BY和ORDER BY的时候会出现Using filesort不能索引排序的问题,解决方案如下:
比如一个sql语句:
explain SELECT id as cid,`title` FROM `app_classify` WHERE ( branch_shop_id=900874159 and parent_id=0 and is_show=1 ) ORDER BY num asc,id asc;
这里面有where也有order by并且两个排序条件num和id
先建立where的条件索引:
alter table app_classify add index branch_shop_id (`branch_shop_id`);
alter table app_classify add index parent_id (`parent_id`);
alter table app_classify add index is_show (`is_show`)
最后建立排序的联合索引:
alter table app_classify add index branch_shop_id-parent_id-is_show-num-id (`branch_shop_id`,`parent_id`,`is_shop`,`num`,`id`);
注意:`branch_shop_id`,`parent_id`,`is_shop`,`num`,`id`这里的branch_shop_id,parent_id,is_shop是where后面的条件放在前面,num,id是order by放在条件的后面,num,id的顺序和sql语句的order by num asc,id asc一样,如果错了索引不生效。
如果没有where就不需要在order by加索引了。
不要一个升序一个降序比如:ORDER BY num desc,id asc,这样不走索引。
不要一个升序一个降序比如:ORDER BY num desc,id asc,这样不走索引。
- 上一篇:解决微信公众号开发提示未绑定网页开发者
- 下一篇:js按照键key排序
精品好课