sql语句:
SELECT
*
FROM
jh_ask
ORDER BY
`answer_num` DESC,
`dateline` DESC,
`views` DESC,
`orderby` ASC
LIMIT 0,10;
数据总量5.4W条,根据sql的order by后的几个排序字段,建立了answer_num,dateline,views,orderby 4个字段的联合索引order,发现执行还是慢,explain了一下,如下图:
发现索引根本没用到,进行了全表扫描,我该怎么做才能让他用上索引?
SELECT
*
FROM
jh_ask
ORDER BY
`answer_num` DESC,
`dateline` DESC,
`views` DESC
LIMIT 0,10;
如果去掉最后的orderby,是可以用上索引的
已经发现问题,好像order by后的排序方向要一致才能用上索引,只要有其中一个不是一个方向的,就不能用上,那像我这种情况还能优化么?
确实的,mysql复合索引还不支持不同类型的排序操作,即使建立索引时定义不同的排序也是无效的,这是mysql索引的一个待优化的地方。对于你的情况sql本身基本没有优化空间,从业务逻辑层看看吧