mysql - 带有子查询和 "HAVING"的极慢 SQL 查询

标签 mysql sql

我有这个查询,我想计算“用户”中有多少条目在“用户名”中有多个条目

SELECT usernames.NAME,
    COUNT(user.id)
FROM user
INNER JOIN user_username ON user.id = user_username.user_id
INNER JOIN usernames ON user_username.user_username_id = usernames.id
WHERE 
    user.datecreated BETWEEN '2016-01-01' AND '2016-09-01'
    AND user.id IN 
        (
            SELECT user_id
            FROM user_username
            GROUP BY user_id
            HAVING COUNT(*) > 1
        )
GROUP BY usernames.NAME
ORDER BY user.id DESC

查询有效,但速度太慢,有什么想法可以加快查询速度吗?

最佳答案

像这样分解查询有帮助吗?

CREATE TEMPORARY TABLE QualifiedUserIDs AS (
SELECT user_id
FROM user_username
GROUP BY user_id
HAVING COUNT(*) > 1);

SELECT usernames.NAME,
    COUNT(user.id)
FROM user
INNER JOIN QualifiedUserIDs quids ON quids.user_id = user.id 
INNER JOIN user_username ON user.id = user_username.user_id
INNER JOIN usernames ON user_username.user_username_id = usernames.id
WHERE 
    user.datecreated BETWEEN '2016-01-01' AND '2016-09-01'

GROUP BY usernames.NAME
ORDER BY user.id DESC

关于mysql - 带有子查询和 "HAVING"的极慢 SQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36158330/

相关文章:

python - Flask Mysql 连接器问题

mysql - Asp.NET MVC 如何在数据表中快速显示大量数据

mysql - 如何将字段从时间戳转换为日期时间

MySQL 确定性迁移脚本

python - MySQLClient 安装错误 : "raise Exception("Wrong MySQL configuration: maybe https://bugs. mysql.com/bug.php?id"

MySQL/MariaDB 混合数据类型排序

mysql - 如何根据时间戳和 bool 值查询记录?

mysql - 将 Entity Framework 查询转换为 SQL

sql - OR 语句大大减慢了查询速度

sql - 仅为更新的记录获取层次结构