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

Brug af variabler i forespørgslen genererer en anden forespørgselsplan

For når du bruger FIXED værdier med AUTO-PARAMETERISERING slået fra, så ved forespørgselsplanen PRÆCIS hvilken værdi den skal køre forespørgslen efter. Så planen er indstillet SPECIFIKT til disse værdier.

Men når du bruger variabler, er den plan, der vil blive lagt ind i forespørgselscachen, den, der indeholder de parametriserede variabler - som kan erstattes af enhver variabel og vil genbruge den samme plan. Derfor skal disse planer være mere robuste og generiske for at håndtere "bedste gennemsnitssag".

I SQL Server 2008 kan du indstille, om simple parametre automatisk parametreres eller ej, så du konsekvent får den "bedste gennemsnitlige sag"-plan - med alt det gode og det dårlige.

Ref:

EDIT - om ydeevne

Hvad angår ydeevne, kan optimeringsværktøjet tage fejl - i dette tilfælde kiggede den på statistik for the exact values og mente, at indekset ikke er nyttigt (kan være et problem med vippepunkter), så planen er en clusterscanning i stedet for. Det er en fin kunst at gennemtvinge en forespørgselsplan - men det er klart, at det er 50 % hurtigere at bruge et indeks for

  1. specifik hardware
  2. specifik datafordeling på tidspunktet
  3. specifikke værdier angivet

Medmindre jeg havde en meget god grund, ville jeg ikke spille Query Optimizer (f.eks. ved at bruge indekstip), medmindre jeg har masser af data til at bevise, at det uvægerligt vil gøre det hurtigere.




  1. Softwaregennemgang – Stellar Repair til MS SQL

  2. Fejl ved forsøg på at migrere postgresql db til mysql med workbench

  3. fe_sendauth:ingen adgangskode angivet fejl efter opsætning af PostgreSQL-database på Cloud9 IDE

  4. Synkroniser database på ipad med fjerndatabase