我有两个表,我想在特定日期获取这两个表之间的公共列,我也希望将它们分组:

SELECT uv.keywordid, uv.competitionid
  FROM unique_views as uv
       JOIN signups AS s
            ON s.keywordid=uv.keywordid
               AND s.competitionid=uv.competitionid
 WHERE    uv.dt_created > "2014-02-27"
       AND s.dt_created > "2014-02-27"
GROUP BY
       uv.keywordid, uv.competitionid
ORDER BY
       uv.keywordid, uv.competitionid


两个表中都索引了keywordid和Competitionid。这两个表目前大约有11k条记录,并且大多数条目具有相同的keywordid和Competitionid。

此查询将我的表锁定了约20秒。我该怎么做才能提高速度?

最佳答案

因此,您要使用2014年2月27日之后在两个表中创建记录的不同对的keywordid和Competitionid。然后使用DISTINCT,而不要使用GROUP BY。

这是一种保证在进行联接之前从每个表中选择不同元组的方法。所以这应该很快:

select keywordid, competitionid
from
  (select distinct keywordid, competitionid from unique_views where dt_created > "2014-02-27") uv
inner join
  (select distinct keywordid, competitionid from signups where dt_created > "2014-02-27") s
using (keywordid, competitionid)
order by keywordid, competitionid;

10-04 21:44