我正在尝试获取在使用指定语言的任何回购邮件上执行拉取请求的用户列表。
SELECT distinct(actor_id) as id FROM pull_requests
JOIN (SELECT id FROM repos WHERE language = 'javascript') as res
ON pull_requests.repo_id = res.id
我一直在尝试提高此查询的性能。目前运行需要2秒+。
答案 0 :(得分:1)
首先 - 尝试半连接:
SELECT distinct actor_id as id
FROM pull_requests p
where exists (
select null
from repos r
where p.repo_id = r.id and r.language = 'javascript'
)
其次 - 根据此更改验证您的distinct
是否必要。在这种情况下,可能是,但是半连接通常可以消除distinct
的需要,其中它被用作1 ::多次返回多行的拐杖 - exists
不会根据repos
表中的多个匹配项对结果进行乘法。
答案 1 :(得分:0)
试试这个:
{{1}}
您可能需要在repo_id和/或id字段
上建立索引答案 2 :(得分:0)
尝试使用IN
SELECT distinct(actor_id) as id
FROM pull_requests
WHERE pull_requests.repo_id IN (SELECT id FROM repos WHERE language = 'javascript')