我有一个请求,他们将一个约1700万件商品的表与另一件超过8000万件商品的表进行比较。 我使用“IN”运算符:
SELECT COUNT(1)
FROM table1
WHERE mykey IN (SELECT mykey FROM table2 WHERE (thematique = '1'))
这非常有效,但是很长一段时间......
无论如何,这是一种快速的方式吗?
也许没有“IN”操作符?
答案 0 :(得分:2)
我认为加快此查询的最佳方法是在table2 (thematique, mykey)
上建立索引。然后很容易找到thematique 1记录并立即访问他们的mykeys而不必访问该表。
我不认为使用IN
或EXISTS
还是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.mykey
和T2.mykey
可能复合索引会更好T2.thematique
(T2.mykey,T2.thematique)