我正在测试使用单个INSERT语句插入多行的速度.
例如:INSERT INTO [MyTable] VALUES(5,'dog'),(6,'cat'),(3,'fish)
这是非常快的,直到我在一个语句上传递50行,然后速度显着下降.
插入10000行,批量为50,需要0.9秒.插入10000行,批量为51,需要5.7秒.
我的问题有两个部分:
我的测试是在c ++和ADO中完成的.
编辑:看起来下拉点不是50行,而是1000列.我得到了50行20列或100行10列的类似结果.
您是否还与此处显示的“union all”方法进行了比较?http://blog.sqlauthority.com/2007/06/08/sql-server-insert-multiple-records-using-one-insert-statement-use-of-union-all/
我怀疑有一个内部缓存/索引最多使用 50 行(这是一个很好的四舍五入数字)。50 行之后,它会求助于效率较低的一般情况插入算法,该算法可以处理任意数量的输入,而无需使用过多的内存。