/ / SQL Server pode usar mais de um índice? - sql-server, sql-server-2008, indexação

O SQL Server pode usar mais de um índice? - sql-server, sql-server-2008, indexação

IMHO SQL Server pode escolher a si mesmo (a menos que seja dito) o que é o melhor índice a ser usado para a consulta.

Está bem

E algo parecido com isto (pseudo código):

select __a from tbl where __a not in
(
select __b  from tbl

)

(digamos que temos index_1 que é para (__a) e index_2 que é para (__b)

O SQL Server ainda usará 1 índice em execução ou vários índices juntos ...?

Respostas:

6 para resposta № 1

Primeiro, crie suas tabelas:

USE tempdb;
GO
CREATE TABLE dbo.tbl(__a INT, __b INT);

Em seguida, crie dois índices:

CREATE INDEX a_index ON dbo.tbl(__a);
CREATE INDEX b_index ON dbo.tbl(__b);

Agora preencha com alguns dados:

INSERT dbo.tbl(__a, __b)
SELECT [object_id], column_id
FROM sys.all_columns;

Agora execute sua consulta e gire o plano de execução realem. Você verá algo assim, mostrando que sim, ambos os índices são usados ​​(na verdade, o índice em __b é usado para recuperação de dados na subconsulta e como uma tentativa de eliminar linhas):

insira a descrição da imagem aqui

Uma maneira mais eficiente de escrever sua consulta seria:

select __a from dbo.tbl AS t where not exists
(
select 1 from dbo.tbl AS t2
where t2.__b = t.__a
);

Agora aqui está todo o seu plano (novamente, ambos os índices são usados, mas observe como há muito menos operações):

insira a descrição da imagem aqui