sql - 有没有更快的方法来计算连接上的记录

标签 sql mysql

当配置文件是 Actor 时,此查询会为我提供证据记录最多的配置文件。 有什么方法可以让它在 mysql 查询中更快?

SELECT profiles.*, count(*) AS counted_profiles 
FROM `profiles` 
INNER JOIN (SELECT ev.actor_id 
            FROM evidences AS ev 
            WHERE ev.actor_type = 'Profile') AS ev2
ON ev2.actor_id = profiles.id 
GROUP BY ev2.actor_id 
ORDER BY counted_profiles DESC LIMIT 10

最佳答案

您可以删除 profiles.*,删除子选择,并为连接字段添加索引。

另外,考虑一下:

SELECT ev.actor_id, count(*) AS counted_profiles 
FROM `profiles` INNER JOIN evidences AS ev
      ON ev.actor_id = profiles.id AND ev.actor_type = 'Profile'
GROUP BY ev.actor_id 
ORDER BY counted_profiles DESC LIMIT 10

关于sql - 有没有更快的方法来计算连接上的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1742070/

相关文章:

mysql - phpmyadmin mysql 外键

mysql - 游标或处理程序声明之后的变量或条件声明 SQL 语句 (mysql)

php - 如何在mysql中存储用户的头像

mysql - 我可以让这个 SQL 查询更有效率吗?

php - Codeigniter 在 SQL 查询中使用 LIKE 和 WHERE

SQL Server - 将 SELECT 语句存储到存储过程中的变量中

mysql - Ruby sort_by 用于 MySQL 返回的数组,日期格式为字符串

mysql - 附加从查询返回的值

mysql - 表未正确连接 SQL

sql - 从 SQL 中的日期范围获取不带扩展函数的 sqlite 的工作日数