sql >> Base de Datos >  >> RDS >> Sqlserver

¿Puedo optimizar una consulta SELECT DISTINCT x FROM hugeTable creando un índice en la columna x?

Es probable que esto no sea un problema de indexación, sino de diseño de datos. Normalización, para ser precisos. El hecho de que necesite consultar valores distintos de un campo, e incluso que esté dispuesto a agregar un índice, es un fuerte indicador de que el campo debe normalizarse en una tabla separada con una clave de combinación (pequeña). Luego, los distintos valores estarán disponibles de inmediato escaneando la tabla foránea de búsqueda mucho más pequeña.

Actualización
Como solución temporal, puede crear una vista indexada en un agregado por el campo 'distinto'. COUNT_BIG es un agregado que está permitido en las vistas 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);