MySQL:计算许多连接表中的项目

标签 mysql query-optimization

我有一个表“Events”和几个联合表,如下所示:

事件 + 标签 + 图片 + 视频

我希望能够形成一个查询,在其中我可以计算联合表中的项目(如果有的话)。所以我有类似的东西:

 SELECT t.*, COUNT(distinct t1.id) visible_tags, COUNT(distinct t2.id) 
        invisible_tags, ..., COUNT(distince tn.id) approved_videos
 FROM events t
 LEFT JOIN tags t1 ON ...
 LEFT JOIN tags t2 ON ...
 LEFT JOIN tags t3 ON ...
 ...
 LEFT JOIN videos tn ON ...

问题在于,即使使用所有索引进行查询也需要相当长的时间。有没有办法以不同的方式形成它?

谢谢。

最佳答案

除了 @sanmai 所说的“解释选择”之外,您还可以加入子查询。

SELECT t.*, t1_count, t2_count
FROM events t
LEFT JOIN (select count(distinct id) as t1_count from tags) as t1
LEFT JOIN (select count(distinct id) as t2_count from tags) as t2
...

关于MySQL:计算许多连接表中的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7333083/

相关文章:

mysql - 如何获得 "street number"列中的项目以及 "Occupants"的最小值?

查询 JSON 对象时 MySQL 查询超时

mysql - 如何正确排除相互引用的行?

mysql - 优化 MySQL 中的 ORDER BY 和 LIMIT 查询

c# - LINQ查询优化

c# - 使用 NHibernate 进行原始 SQL 查询的自定义转换器

android - 检查数据库中是否已存在记录,如果没有插入则增加计数字段

mysql - 使用 mysql 数据库

php - 未找到类 'MongoDB\BSON\Regex'

sql - 优化平均值 SQL 查询的平均值