Du kan være interesseret i Første programmeringsregel .
Et klynget indeks inkluderer altid alle rækker. Det kan være sorteret efter z
, men det vil stadig indeholde alle andre kolonner på bladniveau.
Grunden til, at SQL Server nogle gange foretrækker en klynget scanning frem for en indekssøgning, er denne. Når du laver en indekssøgning, skal du følge den op med et bogmærkeopslag til det klyngede indeks for at hente kolonner, der ikke er i indekset.
Når du laver en klynget indeksscanning, finder du per definition alle kolonner. Det betyder, at der ikke kræves et bogmærkeopslag.
Når SQL Server forventer mange rækker, forsøger den at undgå bogmærkeopslag. Dette er et tidstestet valg. Ikke-klyngede indekssøgninger bliver rutinemæssigt slået af klyngede indeksscanninger.
Du kan teste dette for dit tilfælde ved at tvinge enten med with (index(IX_YourIndex))
forespørgselstip
.