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

时间:2011-09-07 11:28:01

标签: 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 ...

问题是查询甚至包含所有索引需要相当长的时间。有没有办法以不同的方式形成它?

感谢。

2 个答案:

答案 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
...