Digamos que eu tenha uma tabela como esta:
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
Se eu fosse fazer isso:
insert into SomeTable(SomeString1, SomeString2)
values('foo', 'bar')
go
E veja o plano de execução real, só vejo uma inserção de índice clusterizado . Por que não estou vendo uma inserção de índice não clusterizada no plano de execução?
select * from SomeTable where String1 = 'foo'
, então vejo que o otimizador de consultas realmente escolhe o índiceIX_SomeString1
para uma busca de índice. Então deve estar atualizando esse índice, não?Respostas:
Para uma inserção de linha única, você obtém um plano estreito / por linha
Se você selecionar o Operador de inserção de índice em cluster e Exibir a janela de propriedades, poderá ver as mesmas informações mostradas no XML.
Se você tentar por 1.000 linhas
Você obtém um plano diferente de amplo / por índice com as operações divididas separadamente
Consulte Wide vs. Narrow Plans ou o blog de Craig Freedman para obter mais informações sobre os dois
fonte
Nunca confie na exibição do plano gráfico, é apenas para iniciantes. Os profissionais sempre olham para o XML. A operação NC está logo ali:
fonte