使用显式创建表语句和加载数据与选择到之间是否存在任何性能差异。此示例仅显示 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 必须评估语句中的表达式才能创建表。
我们的组织通常明确创建临时表作为标准做法,我们想知道大家认为实际上是最佳做法。
最佳答案
CREATE TABLE
让您在插入数据之前更好地控制表的定义,例如 NOT NULL
、约束等您无法使用 选择进入
。
SELECT INTO
是最少记录的操作,但在某些情况下,INSERT..SELECT
也可以最少记录。
参见The Data Loading Performance Guide ,尤其是部分:总结最小日志记录条件。
简而言之,如果您不关心约束等(例如,您想快速创建一个表的副本),SELECT..INTO
恕我直言的优点是代码更短。
否则,您应该使用其他方式,并且您仍然可以将其最低限度地记录下来。
关于sql - 使用显式 create table 语句与 select into 创建表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6832181/