sql >> Databasteknik >  >> RDS >> Sqlserver

Kan jag optimera en SELECT DISTINCT x FROM hugeTable-fråga genom att skapa ett index på kolumn x?

Detta är sannolikt inte ett problem med indexering, utan ett problem med datadesign. Normalisering, för att vara exakt. Det faktum att du behöver fråga efter distinkta värden för ett fält, och till och med är villig att lägga till ett index, är en stark indikator på att fältet bör normaliseras till en separat tabell med en (liten) join-nyckel. Då blir de distinkta värdena tillgängliga omedelbart genom att skanna den mycket mindre utländska uppslagstabellen.

Uppdatera
Som en lösning kan du skapa en indexerad vy på ett aggregat av fältet "distinkt". COUNT_BIG är ett aggregat som är tillåtet i indexerade vyer:

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);


  1. MySQL regex vid körning

  2. Vilken hierarkisk modell ska jag använda? Närliggande, kapslad eller uppräknad?

  3. Möjligt att ange unikt index med NULL tillåtna i Rails/ActiveRecord?

  4. välja ett specifikt nummer som kolumnvärde i frågan