【发布时间】:2011-04-01 16:22:59
【问题描述】:
我假设这是每个使用 SQL Server 的人最常见的情况。
场景:
我有这些表 tabSRC_A(id,date,data1)、tabSRC_B(id,Date,data2) 和 tabDEST
现在我的任务是从tableSRC_A、tableSRC_B 获取数据,对它们进行一些过滤和清理,然后将它们插入tabDEST。
我正在使用以下代码进行此操作
insert into tabDest(id, Date, Data1, Data2)
Select id, date, Data1, Data2
from tabSRC_A A
inner join tabSRC_B B on A.id = B.id and A.date = B.date
where not exists
(select * from tabDest Dest
where Dest.id = B.id and Dest.date = B.date)
如果已经存在,我会更新
这是该操作的最佳解决方案吗?
每个表的大小为 1000 万行
我也在考虑使用代理键创建一个视图并根据 id 执行检查,而不是使用上述方法检查每一行
像这样的
insert into tabDest(id, Date, Data1, Data2)
Select id, date, Data1, Data2
from view_Created_From_TabA_TabB_adding_a_SurrogateKey_Kid SV
where SV.Kid > select (max(id) from tabDest)
我假设这会快得多。
如果您有任何建议,请指导我。
(我使用的是 SQL Server 2000,我知道它很老了)
【问题讨论】:
标签: sql sql-server tsql sql-server-2000 query-optimization