int  bigint int
id   nr     time这是一个百万的数据表,mysql 100%
语句:
SELECT id,cx_time FROM k_cx WHERE nr=13400043001 ORDER BY id DESC LIMIT 20;//所用时间1.058s左右,请问我该怎么优化 经测试如下语句:
SELECT id,cx_time FROM k_cx ORDER BY id DESC LIMIT 20;
//0.0s
SELECT id,cx_time FROM k_cx WHERE nr=13400043001 ORDER BY id DESC;
//0.187s
这条现在凑活用着,服务器正常了.但是还是想要只取前20条.该怎么优化呢,请问,各位高手.

解决方案 »

  1.   

    你确定测试没问题?
    SELECT id,cx_time FROM k_cx WHERE nr=13400043001 ORDER BY id DESC LIMIT 20;//所用时间1.058s左右
    SELECT id,cx_time FROM k_cx WHERE nr=13400043001 ORDER BY id DESC;
    //0.187s
    怎么可能加上limit后反而效率低了这么多,贴出你的explain
      

  2.   

    首先数据库类型选择INNODB。
    参考:http://stackoverflow.com/questions/20148/myisam-versus-innodb其次建立索引
    ALTER TABLE `k_cx` ADD INDEX `nr` (`nr`)然后,增加sort_buffer_size 和read_rnd_buffer_size在你的my.cnf或者my.ini里
    参考:http://dev.mysql.com/doc/refman/5.5/en/order-by-optimization.html
      

  3.   

    id,nr 建复合索引,因为id要排序,nr要过滤.都可以用索引优化
      

  4.   

    字段  nr 是bigint 里面有大量重复内容. 唯一,主键,都不成,加全文出错
      

  5.   

    create index xxx on k_cx(nr,id);