新手刚用mysql,请问一下一张a表3W条的记录在a表的xxx字段建立索引
create index a_xxx  on a(xxx desc);
然后select * from table order by XXX 只需要 0.02秒
为什么用
select * from table order by XXX desc就需要 6-7秒不解..求指点是不是没有降序索引的,那小弟该如何使得倒序排序速度快一些呢?

解决方案 »

  1.   


    create index a_xxx  on a(xxx);
      

  2.   

    explain select * from table order by XXX ;
    explain select * from table order by XXX desc;看一下,BTREE理论上应该没有这么大的差别。 你的第一个语句是不是执行过了一次再执行的?mysql> select count(*) from (select * from t1 order by id )t;
    +----------+
    | count(*) |
    +----------+
    |   499999 |
    +----------+
    1 row in set (11.86 sec)mysql> select count(*) from (select * from t1 order by id desc)t;
    +----------+
    | count(*) |
    +----------+
    |   499999 |
    +----------+
    1 row in set (11.73 sec)mysql>
      

  3.   


    可能是执行一次的缘故吧,可是desc 执行多次还是很慢。XXX类型是vchar型的日期字段降序 ,还有个点击量的int字段可能之前执行过一次了,可谓神恶魔
    小弟现在的窘境是where 后跟着多个and,并且根据2个字段排序一个升一个降,
    在innoDB 中的索引机制查询速度着实惨不忍睹,
    每次需要10秒左右并且还得按不同的过滤条件取10次,打开页面的速度可想而知。无奈之下把mysql中的query_buffer存从0改到了80M,inndb_buffer改成50M才得以解决打开首页过慢的问题。