改进或消除 mysql COUNT 的方法
Way to improve or eliminate a mysql COUNT
请原谅我对这个问题的无知,因为我在这方面的经验不多。我有一个页面使用 mysql COUNT(*)
查询 return 用户的统计信息。例如,类似于:
SELECT COUNT(*) FROM worker WHERE worker_id = '1234';
它使用 worker_id
的索引并检查 EXPLAIN
似乎查询看起来不错。然而,这执行起来绝对残酷,并且在具有一百万行以上的 table 上进行单个查询可能需要 5 秒以上的时间。此外,这是一个非常常见的查询,有时它会导致 mysql 超时错误,多个查询试图 运行 this.
'solve'这个问题有什么好方法?信息变化非常快,所以我认为缓存它不会起作用。我将如何解决这个问题,一些大型网站如何显示统计信息(例如,Facebook 好友或 Twitter 关注者)?
首先,请确保您在 worker(worker_id)
上有一个索引。
其次,如果列确实是数字而不是字符串,则不要使用单引号:
SELECT COUNT(*)
FROM worker
WHERE worker_id = 1234;
第三,如果你只需要知道工人是否存在(实际上不需要计数),那么运行这样的查询:
select 1
from worker
where worker_id = 1234
limit 1;
并检查是否返回了任何行。
请原谅我对这个问题的无知,因为我在这方面的经验不多。我有一个页面使用 mysql COUNT(*)
查询 return 用户的统计信息。例如,类似于:
SELECT COUNT(*) FROM worker WHERE worker_id = '1234';
它使用 worker_id
的索引并检查 EXPLAIN
似乎查询看起来不错。然而,这执行起来绝对残酷,并且在具有一百万行以上的 table 上进行单个查询可能需要 5 秒以上的时间。此外,这是一个非常常见的查询,有时它会导致 mysql 超时错误,多个查询试图 运行 this.
'solve'这个问题有什么好方法?信息变化非常快,所以我认为缓存它不会起作用。我将如何解决这个问题,一些大型网站如何显示统计信息(例如,Facebook 好友或 Twitter 关注者)?
首先,请确保您在 worker(worker_id)
上有一个索引。
其次,如果列确实是数字而不是字符串,则不要使用单引号:
SELECT COUNT(*)
FROM worker
WHERE worker_id = 1234;
第三,如果你只需要知道工人是否存在(实际上不需要计数),那么运行这样的查询:
select 1
from worker
where worker_id = 1234
limit 1;
并检查是否返回了任何行。