【发布时间】:2017-02-17 20:55:25
【问题描述】:
我需要运行查询来比较两个表并返回不在第二个表中的记录。棘手的部分是两个表之间的链接是有条件的。我有多个来源输入 Table2,然后输入 Table1。我试过使用连接,但这并不比我下面的快。这些表中有大约 50k 条记录。完成此查询大约需要 1.5 分钟。我希望能把它弄到几秒钟左右。 Table1 和 Table2 已经在这些字段上有索引。数据库在兼容级别 SQL2008 上运行。
此查询大约需要 1.5 分钟:
select *
from Table1 t1
where not exists (select *
from Table2 t2
where t2.seedID = case t2.SeedSource when 'SeedSource1' then t1.SeedSource1
when 'SeedSource2' then t1.SeedSource2
when 'SeedSource3' then t1.SeedSource3
when 'SeedSource4' then t1.SeedSource4
when 'SeedSource5' then t1.SeedSource5 end)
此查询需要五分钟以上:
select d.*
from Tabel1 t1 left join
Table2 t2 on t2.seedID = case t2.SeedSource when 'SeedSource1' then t1.SeedSource1
when 'SeedSource2' then t1.SeedSource2
when 'SeedSource3' then t1.SeedSource3
when 'SeedSource4' then t1.SeedSource4
when 'SeedSource5' then t1.SeedSource5 end
where t2.seedID is NULL
任何帮助将不胜感激。
【问题讨论】:
-
那么,哪个表是
m,哪个表是d,他们怎么知道t1和t2? -
能否包含与问题相关的表结构子集?
-
您的别名太多,无法确定您要完成的任务 d, t1, t2, m
-
我用正确的别名更新了第二个查询。
标签: sql-server join query-optimization