我有一个innodb表,有50万条数据。
一共有2个列。suijima[varchar(12)]
shiyong[int(1)]alter table `c_table` add index new_index (shiyong)suijima表列储存12个单词字母组成的不重复的数据,shiyong默认值为0,如果 suijima 被使用,则update shiyong值为1表列内容如下suijima                shiyong      
1urjoldjJhq12            0
KlnY78Frgjsa             0
... ...SELECT * FROM `c_table`
WHERE shiyong = '0'
LIMIT 0,1
大约需要0.8秒钟,如何把查询时间升级到0.00几秒的级别?谢谢。

解决方案 »

  1.   

    目测加cpu、内存能够暂时性解决问题
      

  2.   

    0.8秒已经很快了啊。况且你已经为shiyong建立了索引。个人觉得已经是最快的了。
      

  3.   

    没用过mysql,不过50万条记录,0.8秒好像有点慢.用explain看看index确实起作用了:EXPLAIN SELECT * FROM `c_table`
    WHERE shiyong='0'
    LIMIT 0,1另外, 为什么用"shiyong='0'", 而不是"shiyong=0"?shiyong的类型改为BOOLEAN有没有用?
    除此之外,你的table很简单,也没什么可能采取的手段.
      

  4.   

    btree是数据库或index使用的数据结构吧?我是说把shiyong的数据类型改为BOOLEAN.不过我想只是会节省一些存储空间,对查询速度影响不大.我说的另外两点更可能有用:1. 用explain看看index是否起作用了更有用. 如果index已经用到了,也就没有从软件方面提升的可能了.直接考虑硬件的提升:加内存,换更快的SSD硬盘等.2. 把sql语句中的"shiyong='0'"的引号去掉,改为"shiyong=0". 我猜会不会是这个问题导致mysql需要把所有的shiyong的值先转为char再比较,这样的话,一来转换需要时间,二来你建的index也用不上了.