使用显式的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
CREATE TABLE可让您在插入数据(如NOT NULL约束)之前更好地控制表的定义,而这些是您无法使用的SELECT INTO。
CREATE TABLE
NOT NULL
SELECT INTO
SELECT INTO是最少记录的操作,但INSERT..SELECT在某些情况下也可以最少记录。 请参阅《数据加载性能指南》,尤其是以下部分: 汇总最小记录条件 。
INSERT..SELECT
简而言之,如果您不关心约束等问题(例如,您想快速创建表的副本),SELECT..INTO恕我直言,IMHO的优点是代码更短。 否则,您应该使用其他方式,并且仍然可以将其最小限度地记录下来。
SELECT..INTO