一个有100多万条数据的表该如何统计数据总量

时间:2021-10-09 21:23:44
例如:

select count(0) from table1 where datatime > '2012-07-09 00:00:00';

随着数据量的变多,花费的时间会变长

有没有什么方法查找100万条数据的总量和查找10万条数据总量所花费的时间差不多

19 个解决方案

#1


count难于优化,从硬件方面想想办法

#2


datetime上建索引

#3


count没有办法优化。datetime是否有索引。

#4


datetime上建索引啊  

#5


引用 3 楼  的回复:
count没有办法优化。datetime是否有索引。


索引什么的都有,没法优化的话,那新浪微博之类的网站,n多数据都怎么统计的总数?

#6


唯一的方法就是添加索引 datatime 

#7


该回复于2012-07-10 10:40:19被版主删除

#8


引用 6 楼  的回复:
唯一的方法就是添加索引 datatime


增加了索引,可还是会因为所查数据的变多,导致查询时间变长,,

#9


如果仅是 select count(0) from table1 where datatime > '2012-07-09 00:00:00'; ,在DATETIME上有索引的情况下应该不会太慢。

贴出你的 explain select count(0) from table1 where datatime > '2012-07-09 00:00:00'; 结果以供分析。

#10


+----+-------------+-------+-------+---------------+--------------+---------+---
---+------+--------------------------+
| id | select_type | table | type  | possible_keys | key          | key_len | ref  |  rows  | Extra               |
+----+-------------+-------+-------+---------------+--------------+---------+---
---+------+--------------------------+
|  1 | SIMPLE      | con_1 | range |     datatime  | datatime     | 4       | NULL | 189292 | Using where; Using index |
+----+-------------+-------+-------+---------------+--------------+---------+---
---+------+--------------------------+
1 row in set (0.07 sec)

还有其他的表用同样的语句,随着数据的变多,花费的时间也会变长

#11


从你的结果来看,索引已经使用了

#12


引用 11 楼  的回复:
从你的结果来看,索引已经使用了


用是用上去了,可是万一数据再多,时间岂不是会变长?

另外,用于网站的数据库查询一般能承受的最长查询时间是多少??

#13


你现在的语句运行需要多久? 已经有索引了,应该不会太长。

#14


引用 13 楼  的回复:
你现在的语句运行需要多久? 已经有索引了,应该不会太长。


1 row in set (0.07 sec);时间是不长,但是我发现随着数据的变多,查询时间也会变长

另外,用于网站的数据库查询一般能承受的最长查询时间是多少,不会影响用户体验??

#15


0.5s 以内应该问题不大。

#16


发现随着数据的变多,查询时间也会变长   --  这是必然的。有何疑问的。

另外,用于网站的数据库查询一般能承受的最长查询时间是多少,不会影响用户体验??
--  这就参考与用户了。没有标准,反正越短越好。

#17


记录越多,时间耗费越多

#18


比较datetime要求的粒度是多细?
如果比较datetime的粒度是天,那可以把每天的记录数(在定期在低峰期跑PHP脚本之类的)预先统计好放到一张表里,在用户查询的时候,直接从这张表里取数据 。

#19


另外一种办法就是维护一张统计用的中间表。

#1


count难于优化,从硬件方面想想办法

#2


datetime上建索引

#3


count没有办法优化。datetime是否有索引。

#4


datetime上建索引啊  

#5


引用 3 楼  的回复:
count没有办法优化。datetime是否有索引。


索引什么的都有,没法优化的话,那新浪微博之类的网站,n多数据都怎么统计的总数?

#6


唯一的方法就是添加索引 datatime 

#7


该回复于2012-07-10 10:40:19被版主删除

#8


引用 6 楼  的回复:
唯一的方法就是添加索引 datatime


增加了索引,可还是会因为所查数据的变多,导致查询时间变长,,

#9


如果仅是 select count(0) from table1 where datatime > '2012-07-09 00:00:00'; ,在DATETIME上有索引的情况下应该不会太慢。

贴出你的 explain select count(0) from table1 where datatime > '2012-07-09 00:00:00'; 结果以供分析。

#10


+----+-------------+-------+-------+---------------+--------------+---------+---
---+------+--------------------------+
| id | select_type | table | type  | possible_keys | key          | key_len | ref  |  rows  | Extra               |
+----+-------------+-------+-------+---------------+--------------+---------+---
---+------+--------------------------+
|  1 | SIMPLE      | con_1 | range |     datatime  | datatime     | 4       | NULL | 189292 | Using where; Using index |
+----+-------------+-------+-------+---------------+--------------+---------+---
---+------+--------------------------+
1 row in set (0.07 sec)

还有其他的表用同样的语句,随着数据的变多,花费的时间也会变长

#11


从你的结果来看,索引已经使用了

#12


引用 11 楼  的回复:
从你的结果来看,索引已经使用了


用是用上去了,可是万一数据再多,时间岂不是会变长?

另外,用于网站的数据库查询一般能承受的最长查询时间是多少??

#13


你现在的语句运行需要多久? 已经有索引了,应该不会太长。

#14


引用 13 楼  的回复:
你现在的语句运行需要多久? 已经有索引了,应该不会太长。


1 row in set (0.07 sec);时间是不长,但是我发现随着数据的变多,查询时间也会变长

另外,用于网站的数据库查询一般能承受的最长查询时间是多少,不会影响用户体验??

#15


0.5s 以内应该问题不大。

#16


发现随着数据的变多,查询时间也会变长   --  这是必然的。有何疑问的。

另外,用于网站的数据库查询一般能承受的最长查询时间是多少,不会影响用户体验??
--  这就参考与用户了。没有标准,反正越短越好。

#17


记录越多,时间耗费越多

#18


比较datetime要求的粒度是多细?
如果比较datetime的粒度是天,那可以把每天的记录数(在定期在低峰期跑PHP脚本之类的)预先统计好放到一张表里,在用户查询的时候,直接从这张表里取数据 。

#19


另外一种办法就是维护一张统计用的中间表。

#20