优化MySQL计数(*)查询

时间:2014-04-04 12:52:06

标签: mysql sql

我正在创建一个需要计算与每列关联的行数的mysql查询。我想知道是否有人可以帮助我优化它,因为目前它需要大约10秒才能运行,这是我的网站。 (不理想)

查询是:

SELECT model_make, count(*) FROM deals group by model_make UNION ALL
SELECT model_brand, count(*) FROM deals group by model_brand UNION ALL
SELECT model_name, count(*) FROM deals group by model_name;

我确信有更快的方法吗?如果这真的是运行它的唯一方法,还有什么其他选择可以加快这个速度?

2 个答案:

答案 0 :(得分:0)

确保您在要分组的每个列上都有索引。但是,MySQL必须扫描索引。

其他解决方案是计算一次计数并存储它们,然后根据需要更新它们。

答案 1 :(得分:0)

如果您只需要计数(就像您在原始问题中表达的那样),您可以这样做:

SELECT 
COUNT(DISTINCT model_make)) as CountModelMake, 
COUNT(DISTINCT model_brand)) as CountModelBrand, 
COUNT(DISTINCT model_name)) as CountModelName
FROM deals group by model_make

希望它有所帮助!