sql >> Database >  >> RDS >> Sqlserver

Kan ik een SELECT DISTINCT x FROM hugeTable-query optimaliseren door een index op kolom x te maken?

Dit is waarschijnlijk geen probleem van indexering, maar een van gegevensontwerp. Normalisatie, om precies te zijn. Het feit dat je verschillende waarden van een veld moet opvragen, en zelfs bereid bent om een ​​index toe te voegen, is een sterke aanwijzing dat het veld moet worden genormaliseerd in een aparte tabel met een (kleine) join-sleutel. Dan zijn de verschillende waarden onmiddellijk beschikbaar door de veel kleinere buitenlandse opzoektabel te scannen.

Bijwerken
Als tijdelijke oplossing kunt u een geïndexeerde weergave maken op een aggregaat door het veld 'onderscheiden'. COUNT_BIG is een aggregaat dat is toegestaan ​​in geïndexeerde weergaven:

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. Fout bij het installeren van MySQL-python met pip install in OSX, virtualenv

  2. SQL Server-fout 213:kolomnaam of aantal opgegeven waarden komt niet overeen met tabeldefinitie.

  3. iets over ansi_nulls

  4. PostgreSQL:vind het aantal opeenvolgende dagen tot nu toe