Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
优化MySQL计数(*)查询_Mysql_Sql - Fatal编程技术网

优化MySQL计数(*)查询

优化MySQL计数(*)查询,mysql,sql,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(*)

我正在创建一个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;

我相信有更快的方法可以做到这一点?如果这确实是运行此操作的唯一方法,那么还有哪些其他选项可以加快此操作的速度?

请确保在您分组的每一列上都有一个索引。不过,MySQL必须扫描索引


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

如果您只需要计数(如您在原始问题中所述),您可以执行以下操作:

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

希望有帮助

@TomaszKowalczyk:这是一个神话:计数(1)的可能重复也会起作用。。。但我认为这不会对共享您的桌子结构产生任何影响。