mysql的10万条记录的表,加索引比不加索引查询速度还慢!!! try:SELECT * FROM `table1` WHERE `a1`>=53343212 AND `b1` <=53343212 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 sorry,try again:SELECT * FROM `table1` WHERE `a1`<=53343212 AND `b1` >=53343212 这说明mysql是一个小数据库,如果索引使用和处理不当,当然会造成速度降低。你应该把这个问题反映给mysql公司。 SELECT * FROM `table1` WHERE 53343212 BETWEEN `a1` AND `b1`; 与SELECT * FROM `table1` WHERE `a1`<=53343212 AND `b1` >=53343212我以前已经测试过了,两者测试结果是几乎一样的!前者比后者稍微快一点点 这种情况下是无法用到BTREE索引的,其他的数据库也一样。索引只在等于或小范围的比较值内才有效,否则还不如SCAN整个表。你的应用问题有点怪,恐怕要重新设计表结构 我也觉得挺怪的,没理由mysql不用索引呀!(每次的查询返回结果都控制在不大于5条)我还试过把a1 int(9) not null,b1 int(9) not null,都改为double,结果一样。我甚至在多台不同的机器上建立mysql数据库(win2000,Lunix),但是测试结果还是一样!应该不是数据结构的原因,表结构挺简单的一共就6,7字段,而且10万多条数据,数据量也不算大!有人遇到过这样奇怪的现象吗?真是晕了。To: trainee(春泥) 为什么这种情况下是无法用到BTREE索引? 好久没有来了,我觉得是你的设计有问题,我用过那么久的mysql,没有发现呀。我的记录数为60万条的,查询都是转瞬即出的。 我的查询速度也不算太慢,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 nulla1和b1为主键请问你对这个表设计有什么更好的建议吗? 索引文件是否有损毁啊,尝试把原来的索引drop了重建 索引文件我已经drop create optimize 多次了! 1。关键是看你10万行中的A、B数据是如何分步的你算一下A<=53343212 的数据量一共多少再算一下B>=53343212的数据量一共多少两者之间的最小值就是本语句需要SCAN索引的次数如果这个值很大的话,使用索引就没什么意义.2。我不知道你的应用是什么,所以我无法设计出更合理的表结构,(也许你的表结构已经很合理了,速度只能这样了) mysql随机从数据库中取一条数据 建表主键选择求解 jsp提交数据, 中文出现乱码,如何在数据库中设置,以纠正乱码? msql 存储过程有上限吗? 怎样监控分区键将要达到极限? MySQL 打印变量 语句 mysql找不到表 请教linux 安装mysql问题 JAVA 如何查询数据库列的长度限制? thinkphp 3.2.3 使用pdo输出中文为问号 奇怪的问题?? 请教一句mysql语句优化
FROM `table1`
WHERE `a1`<=53343212 AND `b1` >=53343212
FROM `table1`
WHERE 53343212 BETWEEN `a1` AND `b1`;
与
SELECT *
FROM `table1`
WHERE `a1`<=53343212 AND `b1` >=53343212
我以前已经测试过了,两者测试结果是几乎一样的!前者比后者稍微快一点点
索引只在等于或小范围的比较值内才有效,否则还不如SCAN整个表。
你的应用问题有点怪,恐怕要重新设计表结构
我还试过把
a1 int(9) not null,
b1 int(9) not null,
都改为double,结果一样。
我甚至在多台不同的机器上建立mysql数据库(win2000,Lunix),但是测试结果还是一样!应该不是数据结构的原因,表结构挺简单的一共就6,7字段,而且10万多条数据,数据量也不算大!有人遇到过这样奇怪的现象吗?真是晕了。To: trainee(春泥)
为什么这种情况下是无法用到BTREE索引?
实际表结构为
字段:
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为主键请问你对这个表设计有什么更好的建议吗?
你算一下A<=53343212 的数据量一共多少
再算一下B>=53343212的数据量一共多少
两者之间的最小值就是本语句需要SCAN索引的次数
如果这个值很大的话,使用索引就没什么意义.
2。我不知道你的应用是什么,所以我无法设计出更合理的表结构,(也许你的表结构已经很合理了,速度只能这样了)