一尘不染

使用显式create table语句而非select into创建表

sql

使用显式的create
table语句和加载数据与选择数据之间是否存在性能差异。此示例仅显示2列,但问题是针对使用非常大的表。下面的示例也使用临时表,尽管我也想知道使用常规表的效果。我认为无论表类型如何,它们都是相同的。

临时表方案:

--- Explicitly creating temp table first and then loading.
create table #test1 (id int, name varchar(100))
insert into #test1 (id, name) select id, name from #bigTable

--- Creating temp table by selecting into.
select id,name into #test2 from #bigTable

或常规表:

--- Explicitly creating table first and then loading.
create table test1 (id int, name varchar(100))
insert into test1 (id, name) select id, name from #bigTable

--- Creating table by selecting into.
select id,name into test2 from bigTable

大家对此有何想法?我认为,显式创建表和加载必须比select into具有更好的性能,因为select into必须评估语句内的表达式才能创建表。

我们的组织通常会显式地创建临时表,将其作为标准做法,而我们想知道所有想法实际上都是最佳做法。

http://msdn.microsoft.com/en-
us/library/ms188029.aspx


阅读 129

收藏
2021-05-16

共1个答案

一尘不染

CREATE TABLE可让您在插入数据(如NOT NULL约束)之前更好地控制表的定义,而这些是您无法使用的SELECT INTO

SELECT INTO是最少记录的操作,但INSERT..SELECT在某些情况下也可以最少记录。
请参阅《数据加载性能指南》,尤其是以下部分: 汇总最小记录条件

简而言之,如果您不关心约束等问题(例如,您想快速创建表的副本),SELECT..INTO恕我直言,IMHO的优点是代码更短。
否则,您应该使用其他方式,并且仍然可以将其最小限度地记录下来。

2021-05-16