中国开发网: 论坛: 程序员情感CBD: 贴子 563773
李战
事务提交都只是一次,只是这两写法在执行上不同。详细解释见内
如果是
insert t (f) value (1)
insert t (f) value (2)
insert t (f) value (3)
...
每条insert语句都要生成一个执行计划的。
而且后一句不能直接利用前一句的执行计划,因为插入的都是常量,两句insert不相同。重用执行计划只对插入变量或参数的语句有效,因为sql语句相同。

而这种写法
insert t (f)
select 1
union select 2
union select 3
...
SQL Server只生成一个执行计划。首先会把那些常量merge成一个内存行集,再一次insert到表中。merge常量值几乎不会有什么开销,也许会多耗点内存。

当然,如果是用union all
insert t (f)
select 1
union all select 2
union all select 3
...
则效率更高,因为都不需要用排出重复值的merge操作,而直接是Concatenation,也就是直接合成内存行集。因此,如果你允许插入重复值,或者你的常量无重复值,不防加个all

当然,SQL就又长了点。
李战(leadzen)

相关信息:


欢迎光临本社区,您还没有登录,不能发贴子。请在 这里登录