我的目标是找到所有返回两个已在另一个表中标记为成对的结果的搜索。
我有两张桌子:
Search_Results
...
request_id varchar(16)
result_id bigint
...
request_id
对应于搜索请求,result_id
对应于显示的结果之一。每个请求通常会有10-15个结果。
Result_Pairs
...
left_result_id bigint
right_result_id bigint
...
left_result_id
和right_result_id
是一对结果ID,对应于搜索结果表中的result_id
。
我对SQL相当陌生,我不知道如何为我的生活找出如何获得所有request_id
s用于从结果对返回两个结果的搜索。我应该从哪里开始?作为一个警告,Search_Results有大约33亿行,Result_Pairs有大约400万行,所以性能将是一个问题。通过按日期限制,Search_Results可以并且将会被大量削减,但仍然会有数百万行。
答案 0 :(得分:0)
不确定我理解你的问题,但这样的事情可能是:
select *
from search_results sr
join result_pairs rp on sr.result_id
between rp.left_result_id and rp.right_result_id;
where search_date = date '2015-01-15'
您肯定需要search_results (result_id)
上的索引和result_pairs (left_result_id, right_result_id)
上的索引(当然还有该日期列)