Les instructions INSERT vs INSERT unique avec plusieurs VALEURS

Je suis en exécutant une comparaison des performances entre l'utilisation de 1000 instructions 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)

..rapport à l'aide de la seule instruction INSERT avec 1000 valeurs:

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)

À ma grande surprise, les résultats sont à l'opposé de ce que je pensais:

  • 1000 instructions INSERT: 290 ms.
  • 1 instruction INSERT avec 1000 VALEURS: 2800 msec.

Le test est exécuté directement dans MSSQL Management Studio avec générateur de profils SQL Server est utilisé pour la mesure (et j'ai obtenu des résultats similaires en cours d'exécution à partir de code C# à l'aide de SqlClient, ce qui est encore plus surprenant compte tenu de tous les DAL couches allers-retours)

Cela peut-il être raisonnable ou d'une autre manière de l'expliquer? Comment un soi-disant plus rapide des résultats de la méthode en 10 fois (!) pire performance?

Merci.

EDIT: Fixation des plans d'exécution pour les deux:
Les instructions INSERT vs INSERT unique avec plusieurs VALEURS

  • ces sont propres tests, rien n'est en cours d'exécution en parallèle, aucune répétition de données (chaque requête est avec des données différentes, bien sûr, pour éviter la simple mise en cache)
  • existe-il des déclencheurs impliquées?
  • J'ai converti un programme de TVP pour obtenir passé les 1000 limite sur les valeurs et l'ai un gros gain de performance. Je vais courir une comparaison.
  • pertinentes: simple-talk.com/sql/performance/...
InformationsquelleAutor Borka | 2011-12-26