给order by 字段增加索引,orderby的字段必须在最前面设置 接下来给来说一下orderby什么时候使用索引和什么时候不使用索引的情况 1.使用索引情况
SELECT id from form_entity order by name(给name建立索引) 当select 的字段包含在索引中时,能利用到索引排序功能,进行覆盖索引扫描,使用select * 则不能利用覆盖索引扫描且由于where语句没有具体条件MySQL选择了全表扫描且进行了排序操作。SELECT * from form_entity where name =’123’ and category_id=’1’ order by comment desc(name,comment建立复合索引) 组合索引中的一部分做等值查询 ,另一部分作为排序字段SELECT comment from form_entity group by name,comment order by name (name,comment建立复合索引)2.不使用索引情况
SELECT id,comment from form_entity order by name(给name建立索引,comment没有索引)SELECT * from form_entity order by name(给name设置索引)SELECT * from form_entity order by name desc,comment desc(name,comment建立复合索引)SELECT * from form_entity where comment =’123’ order by name desc(name,comment建立复合索引)SELECT name from form_entity where category_id =’123’ order by name desc,comment desc(name,comment建立复合索引,category_id独立索引) 当查询条件使用了与order by不同的索引,但排序字段是另一个联合索引的非连续部分SELECT comment from form_entity group by name order by name ,comment(name,comment建立复合索引)返回数据量过大也会不使用索引 排序非驱动表不会走索引order by 字段使用了表达式去掉不必要的返回字段
增大 sort_buffer_size 参数设置