日期:2014-05-16  浏览次数:20932 次

单表超过2G,查询结果约800W条的效率问题
mysql server是5
问题很简单,语句如下

SELECT count(*) as count FROM `data_changed` WHERE `datetime`>='2012-02-25 21:34:02' AND `datetime`<='2012-02-25 23:36:02';
mysql console下运行得到5.4W条数据,耗时0.25秒

假如我把后边的一个时间改成'2012-03-25 23:36:02 (扩大了搜索范围)
mysql console下运行得到799W条数据,耗时22.67秒

其中datetime字段已经添加了索引。
但为什么查询一个月的数据那么慢呢?当然我肯定字段datetime的索引效果的,毕竟这个表的文件大小和表索引的文件分别为3.3G和1.9G了,没索引肯定第一条语句也非常慢才对。

在实际应用的查询中,还有其他子查询条件(也索引过)。加上其他条件实在忍受不了啦。
这个问题通过google好几天了,还是找不到结果,网上多数说是没建索引之类的问题而已,这些信息对于我没有帮助。
所以我看会不会是mysql的极限了?要真是极限能推荐一下使用什么数据库吗?


------解决方案--------------------
你这个搜索已经覆盖了表中绝大部分数据

不走索引了。。。。应该说,走索引也不能有性能提升

你explain一下看看
------解决方案--------------------
贴出你的
explain SELECT count(*) as count FROM `data_changed` WHERE `datetime`>='2012-02-25 21:34:02' AND `datetime`<='2012-02-25 23:36:02';
show index from `data_changed`

以供分析。
------解决方案--------------------
挺正常的 就是光扫描datetime的索引 也需要读很大的索引存储空间
------解决方案--------------------
考虑下分区吧
------解决方案--------------------
考虑分区表吧