Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Posso otimizar uma consulta SELECT DISTINCT x FROM enorme tabela criando um índice na coluna x?


Isso provavelmente não é um problema de indexação, mas de design de dados. Normalização, para ser mais preciso. O fato de você precisar consultar valores distintos de um campo, e até mesmo desejar adicionar um índice, é um forte indicador de que o campo deve ser normalizado em uma tabela separada com uma chave de junção (pequena). Em seguida, os valores distintos estarão disponíveis imediatamente, verificando a tabela estrangeira de pesquisa muito menor.

Atualização
Como solução alternativa, você pode criar uma exibição indexada a> em um agregado pelo campo 'distinto'. COUNT_BIG é um agregado que é permitido em visualizações indexadas:
create view vwDistinct
with schemabinding
as select x, count_big(*)
from schema.hugetable
group by x;

create clustered index cdxDistinct on vwDistinct(x);

select x from vwDistinct with (noexpand);