ID是主键,我在做分页的时候发现这么一个问题select id from table order by id desc limit 10000,10;
这还是比较快的但是下边这条,就非常慢了,而且查询的时候硬盘狂转
select renew from table order by id desc limit 10000,10;为什么效率跟 select 的内容还有关呢?

解决方案 »

  1.   

    你EXPLAIN一下就明白了。第一条,MYSQL不需要查看索引后再去查表的数据,因为直接用ID的索引即可。而第二条还需要去查完索引再看数据文件。
      

  2.   

    第二条也没理由非常慢看你第二条explain
      

  3.   

    第一个查询,主键ID是物理排序存放,MySQL只需要找到Limit中的最大值和最小值,中间的数据全部选出来,那肯定很快的啊。第二个查询语句,在第一个查询的基础上多了下面的工作:
    1.找到位于ID位于10000,10之前的所有ID
    2.根据ID(主键值)再去找对应的renew字段的值。
      

  4.   


    为了加快第二个查询的效率,如果在SQL Server中,可以考虑建立如下的Index:
    create index ix_table_id_inc_renew on table(id) include(renew);对这样子的查询非常有效果。