try:SELECT * 
FROM `table1` 
WHERE `a1`>=53343212 AND `b1` <=53343212

解决方案 »

  1.   

    sorry,try again:SELECT * 
    FROM `table1` 
    WHERE `a1`<=53343212 AND `b1` >=53343212
      

  2.   

    这说明mysql是一个小数据库,如果索引使用和处理不当,当然会造成速度降低。你应该把这个问题反映给mysql公司。
      

  3.   

    SELECT * 
    FROM `table1` 
    WHERE 53343212 BETWEEN `a1` AND `b1`; 

    SELECT * 
    FROM `table1` 
    WHERE `a1`<=53343212 AND `b1` >=53343212
    我以前已经测试过了,两者测试结果是几乎一样的!前者比后者稍微快一点点
      

  4.   

    这种情况下是无法用到BTREE索引的,其他的数据库也一样。
    索引只在等于或小范围的比较值内才有效,否则还不如SCAN整个表。
    你的应用问题有点怪,恐怕要重新设计表结构
      

  5.   

    我也觉得挺怪的,没理由mysql不用索引呀!(每次的查询返回结果都控制在不大于5条)
    我还试过把
    a1 int(9) not null,
    b1 int(9) not null,
    都改为double,结果一样。
    我甚至在多台不同的机器上建立mysql数据库(win2000,Lunix),但是测试结果还是一样!应该不是数据结构的原因,表结构挺简单的一共就6,7字段,而且10万多条数据,数据量也不算大!有人遇到过这样奇怪的现象吗?真是晕了。To:  trainee(春泥) 
    为什么这种情况下是无法用到BTREE索引?
      

  6.   

    好久没有来了,我觉得是你的设计有问题,我用过那么久的mysql,没有发现呀。我的记录数为60万条的,查询都是转瞬即出的。
      

  7.   

    我的查询速度也不算太慢,1-2秒。按说应该是0.0X秒就可以查到呀!To : istrue(大家都说我很傻我开始也相信了因为我..) :
    实际表结构为
    字段: 
    a1 int(12) not null,
    b1 int(12) not null,
    s1 varchar(6) not null, 
    s2 varchar(12) not null, 
    s3 varchar(40) not null, 
    s4 varchar(120) not null
    a1和b1为主键请问你对这个表设计有什么更好的建议吗?
      

  8.   

    索引文件是否有损毁啊,尝试把原来的索引drop了重建
      

  9.   

    索引文件我已经drop create optimize 多次了!
      

  10.   

    1。关键是看你10万行中的A、B数据是如何分步的
    你算一下A<=53343212 的数据量一共多少
    再算一下B>=53343212的数据量一共多少
    两者之间的最小值就是本语句需要SCAN索引的次数
    如果这个值很大的话,使用索引就没什么意义.
    2。我不知道你的应用是什么,所以我无法设计出更合理的表结构,(也许你的表结构已经很合理了,速度只能这样了)