【发布时间】:2016-01-16 06:38:38
【问题描述】:
我正在尝试使用如下语法使用 SELECT INTO 语句生成临时表:
SELECT [FirstName], [LastName], [Zipcode]
INTO [PeopleAndPlaces]
FROM [FirstNames] F
LEFT JOIN [LastNames] L on F.ID = L.ID
LEFT JOIN [ZipCodes] Z on Z.ID = L.ID
此查询似乎无限期运行(现在超过 2 小时没有结果)。但是,如果我只运行一个 select 语句:
SELECT [FirstName], [LastName], [Zipcode]
--INTO [PeopleAndPlaces]
FROM [FirstNames] F
LEFT JOIN [LastNames] L on F.ID = L.ID
LEFT JOIN [ZipCodes] Z on Z.ID = L.ID
查询在大约 4 分钟内完成。这怎么可能?
作为一项附加检查,我尝试对较小的集合运行查询,无论是否包含 into 子句:
SELECT [FirstName], [LastName], [Zipcode]
INTO [PeopleAndPlaces]
FROM [FirstNames] F
LEFT JOIN [LastNames] L on F.ID = L.ID
LEFT JOIN [ZipCodes] Z on Z.ID = L.ID;
WHERE [Zipcode] = '1000'
SELECT [FirstName], [LastName], [Zipcode]
--INTO [PeopleAndPlaces]
FROM [FirstNames] F
LEFT JOIN [LastNames] L on F.ID = L.ID
LEFT JOIN [ZipCodes] Z on Z.ID = L.ID
WHERE [Zipcode] = '1000'
这两个查询都需要大约 10 秒才能完成,这让我相信创建表并不一定比简单地显示结果需要更长的时间。
【问题讨论】:
-
对于运行时截然不同的两个查询,查询计划是什么样的?我们在谈论多少行?
-
PeopleAndPlaces 的定义是什么?它的索引、约束和触发器是什么?
-
我建议你: 1. 运行 sp_who2 并观察活动。 2. 在上面运行您的查询。 3. 当您的查询运行时,在另一个窗口中运行 sp_who2 并观察差异。你在等待什么, sp_who2 会告诉你什么(虽然它可能很神秘)。请发布您的结果。
标签: sql-server tsql