sql - 使用显式 create table 语句与 select into 创建表

标签 sql sql-server database sql-server-2008

使用显式创建表语句和加载数据与选择到之间是否存在任何性能差异。此示例仅显示 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 是最少记录的操作,但在某些情况下,INSERT..SELECT 也可以最少记录。
参见The Data Loading Performance Guide ,尤其是部分:总结最小日志记录条件

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

关于sql - 使用显式 create table 语句与 select into 创建表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6832181/

相关文章:

sql - Postgres 从 SQL Server BCP 文件中的最后一个预期列之后复制错误额外数据

php - mysql和php建错了?

php - 无法在 pdo 语句中连接 sql

sql - 显示月份的所有日期以及日期名称

java - 使用java同步不同服务器中的两个表的有效方法

mysql - 应用触发器后受影响的行数

database - 为 Google App Maker 记录添加多个所有者

sql - 在分区上排序 string_agg |大查询

MySQL 从多条记录中仅选择具有第一个和最后一个日期的记录

sql-server - 什么是可信连接?