mysql - 如何优化count和group by子查询操作

标签 mysql sql database optimization count

我的主机说以下查询占用了大量服务器 CPU。请告诉我如何优化它。

SELECT COUNT(*) FROM (SELECT COUNT(*) AS tot,wallpapers.*,resolutions.res_height,resolutions.res_width FROM wallpapers

INNER JOIN analytics ON analytics.`wall_id` = wallpapers.`wall_id`

INNER JOIN resolutions ON resolutions.`res_id` = wallpapers.`res_id`



WHERE analytics.ana_date >= '2013-09-01 16:36:56' AND wallpapers.wall_status = 'public'

GROUP BY analytics.`wall_id`) as Q 

请注意,分析表包含所有浏览量和点击量的记录。所以它非常非常大。

最佳答案

据我所知,您的查询只是在通过联接和 WHERE 子句进行过滤后计算不同的 wall_id 值。像这样的东西应该很接近:

SELECT COUNT(DISTINCT analytics.wall_id)
FROM wallpapers
INNER JOIN analytics ON analytics.wall_id = wallpapers.wall_id
INNER JOIN resolutions ON resolutions.res_id = wallpapers.res_id
WHERE analytics.ana_date >= '2013-09-01 16:36:56'
  AND wallpapers.wall_status = 'public'

关于mysql - 如何优化count和group by子查询操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18596036/

相关文章:

mysql - 链接两个 MySQL 表

mysql - 查找其中一个字段不相等的重复记录

php - 如何在数据库中保存为文本类型时比较日期

asp.net - 如何从 SQL 查询中过滤具有唯一 ID 的旧条目

php - 如何在mysql数据库中存储用户的多个值?

python - 如何在 Django 中为对象使用临时存储?

MySQL-error 150解决方法

sql - 如何联合 SELECT 两个具有两个表的 ID 的表?

sql - fetchxml 脚本中的 case 语句

mysql - mysql中的嵌套select语句