改进或消除mysql COUNT的方法

时间:2015-02-24 20:30:41

标签: python mysql sql nosql

原谅我对这个问题的无知,因为我在这方面没有多少经验。我有一个页面使用mysql COUNT(*)查询来返回用户的统计信息。例如,像:

SELECT COUNT(*) FROM worker WHERE worker_id = '1234';

它使用worker_id的索引,并查看EXPLAIN似乎查询看起来不错。但是,这绝对是残酷的,并且在具有一百万+行的表上进行单个查询可能需要5秒以上。此外,这是一个非常常见的查询,有时它会导致mysql超时错误,多个查询尝试运行此命令。

什么是解决问题的好方法。这个问题?信息变化非常快,所以我不认为缓存会起作用。我将如何解决此问题,以及一些大型网站如何处理节目统计数据(例如,Facebook好友或Twitter粉丝)?

1 个答案:

答案 0 :(得分:2)

首先,请确保您在worker(worker_id)上有索引。

其次,如果列实际上是数字而不是字符串,那么请不要使用单引号:

SELECT COUNT(*)
FROM worker
WHERE worker_id = 1234;

第三,如果你只需要知道工人是否存在(并且实际上不需要计数),那么运行这样的查询:

select 1
from worker
where worker_id = 1234
limit 1;

并检查是否返回任何行。