我有两个表,我想在特定日期获取这两个表之间的公共列,我也希望将它们分组:
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;