提高孤立记录搜索的查询速度



我有三个大表(加上 100 万行(

  • Big1 有一个 Bigger1ID
  • Big2 有一个 Bigger1ID
  • Big3 有一个 Bigger1ID

将 ID 保存到另一个表(加上 1000 万行(

  • Bigger1 有一个 Biggest1ID

将 ID 保存到最后一个非常大的表(5000 万行(

  • 最大1

我们发现的问题是,我们在 Biggest1 表中携带的孤儿在 Bigger1 表中保持记录,但在 Big 表中没有。我创建了以下查询,但性能不是很好,这可能只是由于大小,但我想知道是否有更快的方法来做到这一点。我考虑过使用 LEFT JOIN 插入到临时表中,但我没有看到任何收获。

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)

有没有更快的方法来做到这一点?

如果记录位于"更大的表"中(您正在执行内部联接,因此您似乎可以确定这一点(,则根本不需要查询最大的表。那么只是:

    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.MyType IN ('type1', ' type2', 'type3'(

最新更新