我们拿一个例子来分析,这样一个表
需求:查询category_id为1且comments大于1的情况下,views最多的article_id。
SQL语句:select id,author_id from article where category_id=1 and comments>1 order by views desc limit1;
要求分析出要做的索引。
不做索引时,我们explain上面的SQL语句,情况是:
可以看到问题在于type的值为ALL
和Extra的值为Using filesort
。
那么我们可以尝试建立索引:idx_article_ccv(category_id,comments,views)
,再次explain,情况是:
这次的问题在于Extra的值为Using filesort
,因为comments字段是范围值而不是具体的值,而且comments在中间无法出问题会影响views也跟着出问题。
解决方式,去掉上面的索引,新建索引idx_article_cv(category_id,views)
,结果是:
这样的索引便没有问题。