日期:2014-05-16 浏览次数:20710 次
今天在写sql语句时有语句如下:
select article_id from articles where status=1 and (create_time between '2012-05-30 00:00:00' and '2012-06-30 00:00:00') order by read_num desc
为优化该sql,我自信满满的建立组合索引(status,create_time,read_num),当sql语句解析时,却显示如下:
Using where; Using index; Using filesort
出现了最不该出现的Using filesort,查阅了多方资料将索引改为(status,read_num)后一切正常了,原因如下:
(status,create_time,read_num)组合索引看似非常完美,由于create_time不是确定值,使用该组合索引的话仍会一个个找出符合create_time的值后再对其进行排序,会出现file soft,解决办法为使用(status,read_num)索引即可
?
?
?