1

SQL 服务器 (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'

当然假设数据类型与表适当匹配......

4

6 回答 6

8

我认为,基于这个问题,你已经到了过早优化的地步。如果您只是插入 1 条记录,我会坚持使用标准的 insert () values () 并让 Sql Server 团队使其性能最高。

于 2008-10-10T21:56:41.057 回答
7

我刚刚测试了这个。

这两种方法在两组硬件上进行了 500 万次迭代,一组是 16GB RAM 的服务器,一组是 1GB 的笔记本电脑。

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

这些查询计划是相同的,性能差异在统计上是不显着的。

于 2008-10-10T22:31:30.440 回答
2

我怀疑如果存在性能差异,它会支持前者,尽管我怀疑存在差异。

然而,这是选择更清晰的版本(即带有 VALUES)提供可读性和可维护性优势的情况之一,这超过了可能微不足道的性能影响。如果您要指定所有值,请遵守通常的约定,以防其他人阅读代码,乍一看似乎是从另一个表执行 INSERT...SELECT,这是一种误导性的外观。

于 2008-10-10T22:08:21.047 回答
1

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

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

这是您唯一需要的插入模式。它无所不能。请指定字段列表以保护您的语句免受将来的表更改(添加可选列的位置)。

使用 INSERT INTO VALUES 有一些细微差别,我不记得了,因为我不必这样做。

于 2008-10-11T00:59:15.197 回答
0

看起来你只是在模仿

INSERT into SOMETABLE
(
SELECT * FROM SOMEOTHERTABLE
)
于 2008-10-10T21:52:33.937 回答
-1

忽略此评论,这是错误的。对于那个很抱歉 :(

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

INSERT INTO Table SELECT 1, 2, 3, (SELECT 4 FROM Table2 WHERE columnA = columnB)

于 2008-10-10T22:10:16.350 回答