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

时间:2017-03-22 16:24:03

标签: sql-server performance tsql

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

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

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

  • Bigger1有一个Biggest1ID

其中包含最终非常大的表(5000万行)的ID

  • Biggest1

我们发现的问题是我们在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)

有更快的方法吗?

1 个答案:

答案 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')

相关问题