MySQL COUNT需要11秒,如何改进

时间:2012-10-23 00:32:03

标签: mysql indexing

我正在尝试计算销售的发生。

这是我的问题:

SELECT item, COUNT(item) FROM sales_raw
    GROUP BY item HAVING (count(item)>=1)
    ORDER BY COUNT(item) DESC

此查询在大约500,000行的表上大约需要11秒。当我做解释时,我得到:

id  select_type table   type    possible_keys   key key_len ref rows    Extra
1   SIMPLE  sales_raw   index   NULL    vendor_id   767 NULL    397431  Using temporary; Using filesort

为什么这个查询需要这么长时间,我该如何改进呢?

1 个答案:

答案 0 :(得分:0)

  1. 将每个COUNT(item)替换为COUNT(*)。前者检查item中的值是否为NULL,而不是后者。
  2. 如果仍然不够快,请在item列上添加一个索引,这样可以显着加快查询速度。
  3. 此外,HAVING子句似乎没用,因为COUNT(item)不能返回0,因为该项目不会出现在表格中。