Я выполняю сравнение производительности между 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)
.. против использования одного оператора INSERT с 1000 значениями:
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)
К моему большому удивлению, результаты противоположны тому, что я думал:
- 1000 инструкций INSERT: 290 мсек.
- 1 инструкция INSERT с 1000 знаками: 2800 мс.
Тест выполняется непосредственно в MSSQL Management Studio с использованием SQL Server Profiler, используемого для измерения (и у меня есть аналогичные результаты, которые запускаются из кода С# с использованием SqlClient, что еще более удивительно, учитывая все раунды DAL roundtrips)
Может ли это быть разумным или каким-то образом объяснить? Почему, возможно, более быстрый метод приводит к результату в 10 раз (!) хуже?
Спасибо.
EDIT: Присоединение планов выполнения для обоих: