有表及索引如下:create table tbl(a int, b int);
create index indx on tbl(a);
对于下列语句,1. select * from tbl order by a desc;
2. select * from tbl where b > 100 order by a desc;
对于语句1而言,索引indx可以起到作用,
但是对于多了一个条件判断的语句2而言,是不是就没有啥效果了?
因为,要先找到b>100的所有记录,然后再对他们进行排序,这个时候,indx并不会起到什么好的作用!

解决方案 »

  1.   

    是 , 除非B>100 的记录占了大多数记录,比如80%的记录都是B>100的。
      

  2.   

    根据我的这个例子而言,不建立(A)索引,则会出现filesort, 如果建立了索引,mysql会因循着(A)索引,顺序的寻找符合条件的记录。所以,建立还是比不建立好。
    不知道我的观点是否正确?
      

  3.   

    建立(A)索引后,如果有limit N的限定,找到了N条后,则不再继续查找,所以不见得是全表扫描;
    否则,则需要穷尽全表,得到所需,再去filesort.