由于 SQL Server 中的自动参数化过程,多个 INSERT 语句的性能优于具有多个 VALUES 的单个 INSERT。
如果有多个 INSERT 语句,则编译并执行每个语句独立,从而产生最小的开销。但是,对于包含多个 VALUES 的单个 INSERT 语句,查询优化器必须在执行之前解析和编译整个语句,这会显着增加编译时间。
自动参数化的截止发生在 250 个 VALUES 子句左右。超过这个点,缓存的计划大小会突然下降,编译时间急剧增加,处理值子句的效率线性下降。
此行为源于计划类型的更改。使用自动参数化时,计划特定于要插入的文字值。当超过限制时,计划将变为非参数化,并且必须执行不线性扩展的活动,例如排序,这会导致编译时间更长。
这种影响可能会很大,尤其是处理较长的字符串或唯一值时。如图所示,增加字符串长度或消除重复项会导致具有多个 VALUES 方法的单个 INSERT 语句的性能变差。
相反,引入重复项会提高性能,因为 SQL Server 可以在代数阶段识别它们并避免重复项
因此,对于插入多行,使用多个 INSERT 语句通常比使用多个 INSERT 语句更高效值,特别是在处理较长的字符串或唯一值时。
以上是为什么在 SQL Server 中多个 INSERT 语句比具有多个值的单个 INSERT 更快?的详细内容。更多信息请关注PHP中文网其他相关文章!