Disons que j'ai une table comme celle-ci:
create table SomeTable
(
id int identity(1, 1) not null primary key clustered,
SomeString1 varchar(50) not null,
SomeString2 varchar(50) not null
)
go
create nonclustered index IX_SomeString1
on SomeTable(SomeString1)
go
Si je devais faire ceci:
insert into SomeTable(SomeString1, SomeString2)
values('foo', 'bar')
go
Et afficher le plan d'exécution réel, je ne vois qu'un insert d'index clusterisé . Pourquoi ne vois-je pas d' insertion d'index non clusterisé dans le plan d'exécution?
select * from SomeTable where String1 = 'foo'
, alors je vois que l'optimiseur de requête choisit en fait l'indexIX_SomeString1
pour une recherche d'index. Il doit donc mettre à jour cet index, non?Réponses:
Pour un insert à une rangée, vous obtenez un plan étroit / par rangée
Si vous sélectionnez l'opérateur d'insertion d'index clusterisé et affichez la fenêtre des propriétés, vous pouvez voir les mêmes informations que celles affichées dans le XML.
Si vous essayez pour 1000 lignes
Vous obtenez un plan large / par indice différent avec les opérations réparties séparément
Voir Wide vs. Narrow Plans ou le blog de Craig Freedman pour plus d'informations sur les deux
la source
Ne faites jamais confiance à l'affichage du plan graphique, c'est uniquement pour les débutants. Les pros regardent toujours le XML. L'opération NC est là:
la source