sql >> Database teknologi >  >> RDS >> Sqlserver

Kan jeg optimere en SELECT DISTINCT x FROM hugeTable-forespørgsel ved at oprette et indeks på kolonne x?

Dette er sandsynligvis ikke et problem med indeksering, men et problem med datadesign. Normalisering, for at være præcis. Det faktum, at du skal forespørge på forskellige værdier af et felt, og endda er villig til at tilføje et indeks, er en stærk indikator for, at feltet skal normaliseres til en separat tabel med en (lille) join-nøgle. Så vil de distinkte værdier være tilgængelige med det samme ved at scanne den meget mindre udenlandske opslagstabel.

Opdatering
Som en løsning kan du oprette en indekseret visning på et aggregat af feltet 'særskilte'. COUNT_BIG er et aggregat, der er tilladt i indekserede visninger:

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. Hvad er et SPATIAL INDEX, og hvornår skal jeg bruge det?

  2. Bedste måde at sammenligne VARCHAR2 med CHAR

  3. Tom side på Opencart Admin Side

  4. Regelmæssig, gentagne, interaktion mellem et orakel og en smart kontrakt