sql >> Database teknologi >  >> RDS >> PostgreSQL

Ved hvilken kardinalitet skifter SQL Server til en indeksscanning (vs. seek)

Med hensyn til SQL Server er dette blevet omtalt som tippepunktet, hvoraf Kimberleys blogindlæg er en god læsning om det. http://www.sqlskills.com/BLOGS/KIMBERLY /category/The-Tipping-Point.aspx

Vippepunktet er en retningslinje på 25%-33% af det samlede antal sider i tabellen, udtrykt som rækker, f.eks. 10k datasider ville give et tippepunkt på 2500-3333 rækker. Som retningslinjer er dette ret godt, og så godt som du vil blive - husk, at forespørgselsplan-motoren er en sort boks, og selvom den giver dig en forespørgselsplan, siger den kun, hvad den besluttede, ikke hvorfor.

Med hensyn til at tippe et dækkende indeks er det faktisk ikke særlig let, selv når 100 % af dataene er valgt, vil et dækkende indeks stadig søge overscanning i de fleste tilfælde.

Det giver mening, hvis du tænker på, at omkostningsoptimeringsværktøjet ikke tildeler nogen reelle omkostninger til indekssidehierarkiet, koster det kun adgangen til indeksets bladsider. På det tidspunkt koster scanning eller søgning efter 100 % af et dækkende indeks det samme.

Jeg fandt fra mit eget eksperiment (http://sqlfascination.com/2009/11/07/can-a-covering-nc-index-be-tipped ) at bruge en mellem-klausul ville få den til at scanne, men andre steder, hvor klausuler ikke ville - efter hvad jeg kunne se var det udelukkende ned til ruten gennem forespørgselsmotoren.



  1. PHP login klasse

  2. Nogen har hacket min database - hvordan?

  3. MySQL binær vs char tegnsæt binær

  4. Tilføjelse af værdierne af 2 tekstbokse til visning resulterer i en af ​​dem