我正在使用1000个 INSERT 语句进行性能比较:
INSERT INTO T_TESTS (TestId, FirstName, LastName, Age)
VALUES ('6f3f7257-a3d8-4a78-b2e1-c9b767cfe1c1', 'First 0', 'Last 0', 0)
INSERT INTO T_TESTS (TestId, FirstName, LastName, Age)
VALUES ('32023304-2e55-4768-8e52-1ba589b82c8b', 'First 1', 'Last 1', 1)
...
INSERT INTO T_TESTS (TestId, FirstName, LastName, Age)
VALUES ('f34d95a7-90b1-4558-be10-6ceacd53e4c4', 'First 999', 'Last 999', 999)
. . 相对于使用具有1000个值的单个 INSERT 语句:
INSERT INTO T_TESTS (TestId, FirstName, LastName, Age)
VALUES
('db72b358-e9b5-4101-8d11-7d7ea3a0ae7d', 'First 0', 'Last 0', 0),
('6a4874ab-b6a3-4aa4-8ed4-a167ab21dd3d', 'First 1', 'Last 1', 1),
...
('9d7f2a58-7e57-4ed4-ba54-5e9e335fb56c', 'First 999', 'Last 999', 999)
令我大吃一惊的是,结果与我的想法完全相反:
这个测试直接在 MSSQL Management Studio 执行,使用 SQL Server Profiler 进行测量(我在使用 sqlClient 的 C # 代码中得到了类似的结果,考虑到所有的 DAL 层往返,这个结果更令人惊讶)
这是合理的还是可以解释的? 为什么一个据说更快的方法能够获得10倍于(!) worse性能的结果?
谢谢你。
编辑: 附上两者的执行计划: