Performances d'insertion SQL Server avec et sans clé primaire

Résumé: j'ai une table peuplées par les éléments suivants:

insert into the_table (...) select ... from some_other_table

L'exécution de la requête ci-dessus avec pas clé primaire sur the_table est ~15x plus rapide que de courir à avec une clé primaire, et je ne comprends pas pourquoi.

Les détails: je pense que c'est mieux expliqué par des exemples de code.

J'ai une table:

create table the_table (
    a int not null,
    b smallint not null,
    c tinyint not null
);

Si j'ai ajouter une clé primaire, cette requête d'insertion est terriblement lent:

alter table the_table
    add constraint PK_the_table primary key(a, b);

-- Inserting ~880,000 rows
insert into the_table (a,b,c)
    select a,b,c from some_view;

Sans la clé primaire, la même requête d'insertion est d'environ 15x plus rapide. Cependantaprès avoir rempli the_table sans clé primaire, je peux ajouter la contrainte de clé primaire et qui ne prend que quelques secondes. Ce seul fait vraiment pas de sens pour moi.

Plus d'infos:

  • Le plan d'exécution estimé montre 0% total des requêtes temps passé sur l'index cluster insérer
  • SQL Server 2008 R2 édition Développeur, 10.50.1600

Des idées?

source d'informationauteur Eric