SQL-Server 2012的最佳选择。
如果我们有一个需要插入数据库的集合。 一种方法是使用参数化查询执行每个插入,如(伪)
foreach(car in cars)
(
sqlstring = "INSERT INTO car(name, type) VALUES(@name, @type)
execute
)
另一种方法是将每个insert语句放在一起,只执行一个。
foreach(car in cars)
(
sqlstring += "INSERT INTO car(name, type) VALUES(@name+index, @type+index)
)
execute
第二种方法将获得许多可能只使用一次的缓存计划。 我认为第一种方法更快。
我知道使用TableValued参数的第三个选项,但让我们跳过这个讨论。
关于表现的最佳方法是什么?
答案 0 :(得分:0)
鉴于您正在使用SQL Server 2012,还有另一个选项可以更好地工作:只需将它们作为一个插入来执行:
sqlstring = "INSERT INTO car(name, type) VALUES "
foreach(car in cars)
(
sqlstring += "(@name+index, @type+index),"
)
//Remove last comma
execute
它会将插件视为一个批次,通常应该比许多单个插件更好(当然,一如既往,最好对此进行测试以确定)。
答案 1 :(得分:0)
对于几千行,创建一个巨大的语句来保存所有内容并不实际 - 解析语句并生成计划将成为一个明显的开销,特别是如果查询大小本身变量。而是使用单个INSERT
语句,但将它们包装在事务中以最小化日志记录的开销。
虽然您已经丢弃了表值参数,但这些参数也是一个可行的解决方案(当然,几乎总是比大型参数列表更好,尽管有些特殊情况下这些参数更好)。