我有三个大表(加上100万行)
将ID保存到另一个表(加上1000万行)
其中包含最终非常大的表(5000万行)的ID
我们发现的问题是我们在Biggest1表中携带孤儿,这些孤岛在Bigger1表中保存记录但在Big表中没有记录。 我创建了以下查询,但性能不是很好,这可能只是由于大小,但我想知道是否有更快的方法来做到这一点。 我考虑使用LEFT JOINS插入临时表,但我没有看到任何增益。
SELECT
Biggest.ID,
Bigger.ID
FROM
Biggest JOIN Bigger ON Biggest.BiggerID = Bigger.ID
WHERE
Biggest.MyType IN ('type1', ' type2', 'type3')
AND NOT EXISTS (SELECT * FROM Big1 WHERE Bigger1.BiggerID = Big1.Bigger1ID)
AND NOT EXISTS (SELECT * FROM Big2 WHERE Bigger1.BiggerID = Big2.Bigger1ID)
AND NOT EXISTS (SELECT * FROM Big3 WHERE Bigger1.BiggerID = Big3.Bigger1ID)
有更快的方法吗?
答案 0 :(得分:1)
如果记录在更大的表中(您正在进行内部联接,所以您似乎确定了这一点),那么您根本不需要查询最大的表。 然后就是:
SELECT * from bigger b
Left Join Big1 b1 on b1. Bigger1ID = b. Bigger1ID
Left Join Big2 b2 on b2. Bigger1ID = b. Bigger1ID
Left Join Big3 b3 on b3. Bigger1ID = b. Bigger1ID
Where b3. Bigger1ID is null and b3. Bigger1ID is null and b3.Bigger1ID is null
应该足够快。 如果您需要 - 收集所有Bigger1ID,然后加入Biggest表以过滤掉Type。
EG: Biggest.MyType IN('type1','type2','type3')