更有效的方法来比较POSTGRESQL中的两个巨大的表

时间:2015-10-21 14:43:34

标签: sql postgresql

我有一个请求,他们将一个约1700万件商品的表与另一件超过8000万件商品的表进行比较。 我使用“IN”运算符:

SELECT COUNT(1) 
FROM table1 
WHERE mykey IN (SELECT mykey FROM table2 WHERE (thematique = '1'))

这非常有效,但是很长一段时间......

无论如何,这是一种快速的方式吗?

也许没有“IN”操作符?

2 个答案:

答案 0 :(得分:2)

我认为加快此查询的最佳方法是在table2 (thematique, mykey)上建立索引。然后很容易找到thematique 1记录并立即访问他们的mykeys而不必访问该表。

我不认为使用INEXISTS还是INTERSECT会产生很大的不同(尽管MySQL在IN子句中很弱)。由于INTERSECT用于获取两个集合中的不同值,所以这将是我在这里的第一次尝试。

select count(*)
from
(
  select mykey from table1
  intersect
  select mykey from table2 where thematique = '1'
) intersection;

答案 1 :(得分:0)

你试过左联盟吗?

您需要在'A session had already been started - ignoring session_start()'T1.mykeyT2.mykey

上建立索引

可能复合索引会更好T2.thematique

(T2.mykey,T2.thematique)