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

SQL Server 2005 cachelagde en eksekveringsplan, der aldrig kunne fungere

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 .




  1. Almindelige SQL Server-uheld

  2. Postgres kunne ikke oprette forbindelse til serveren

  3. Hvorfor er præcisionen faldende, når du multiplicerer summen til et andet tal

  4. mySQL forespørgsel multiple - returnerer fejlen mysql_fetch_array