插入:一种语法是更优化还是偏好?

时间:2008-10-10 21:50:05

标签: sql performance optimization insert

SQL Server(2005/2008)

以下每个陈述都有相同的结果。有人知道一个人是否胜过另一个吗?

insert into SOMETABLE 
  values ('FieldOneValue','FieldTwoValue',3,4.55,'10/10/2008 16:42:00.000')

insert into SOMETABLE 
  select 'FieldOneValue','FieldTwoValue',3,4.55,'10/10/2008 16:42:00.000'

insert into SOMETALBE
  Select
    Field1 = 'FieldOneValue',
    Field2 = 'FieldTwoValue',
    Field3 = 3,
    Field4 = 4.55,
    Field5 = '10/10/2008 16:42:00.000'

当然假设数据类型与表格相符......

6 个答案:

答案 0 :(得分:8)

我认为,基于这个问题,你已达到premature optimization的目的。如果您只是插入1条记录并让Sql Server团队使其性能最佳,我会坚持使用标准的insert()值()。

答案 1 :(得分:7)

我刚试过这个。

两套硬件上的500万次迭代,一套是16GB内存的服务器,另一套是1GB的笔记本。

结果:它们看起来是一样的。

这些的查询计划是相同的,性能差异在统计上是无关紧要的。

答案 2 :(得分:2)

我怀疑如果有性能差异,那将会有利于前者,虽然我怀疑有一个。

然而,这是选择更清晰版本(即使用VALUES)提供可读性和可维护性优势的情况之一,这可能超过可能忽略的性能影响。如果你要指定所有值,那么坚持通常的约定,以防其他人读取代码,乍一看似乎是从另一个表执行INSERT ... SELECT,这是一种误导性的外观。 / p>

答案 3 :(得分:1)

对于SQL Server,只需使用此模式

INSERT INTO TableName( fieldList ) SELECT( valueList / columnList ) [ FROM等等]

这是您需要的唯一插入模式。它做了一切。请指定 fieldlist 以保护您的语句免于将来的表更改(添加了可选列)。

使用INSERT INTO VALUES有一些细微的差别,我不记得了,因为我不需要。

答案 4 :(得分:0)

看起来你只是在模仿

INSERT into SOMETABLE
(
SELECT * FROM SOMEOTHERTABLE
)

答案 5 :(得分:-1)

忽略此评论,错误。抱歉:(

我知道当你输入多行时你不能使用INSERT VALUES()。

插入表格 SELECT 1,2,3,(SELECT 4 FROM Table2 WHERE columnA = columnB)