我有一个表'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 ...
问题是查询甚至包含所有索引需要相当长的时间。有没有办法以不同的方式形成它?
感谢。
答案 0 :(得分:1)
如果查询需要很长时间,则问题不在查询中。
此查询中使用了哪些索引?请显示使用EXPLAIN SELECT ...
答案 1 :(得分:1)
除了@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
...