sql >> Databasteknik >  >> RDS >> Sqlserver

Att använda variabler i fråga genererar olika frågeplan

För när du använder FIXA värden med AUTO-PARAMETERISERING avstängd, då vet frågeplanen EXAKT vilket värde den behöver köra frågan för. Så planen är inställd SPECIFIKT till dessa värden.

Men när du använder variabler är planen som kommer att läggas in i frågecachen den som innehåller de parametriserade variablerna - som kan ersättas av vilken variabel som helst och kommer att återanvända samma plan. Därför måste dessa planer vara mer robusta och generiska för att hantera "bästa genomsnittliga fall".

I SQL Server 2008 kan du ställa in huruvida enkla parametrar parametreras automatiskt eller inte så att du konsekvent får den "bästa genomsnittliga fallet"-planen - med alla dess bra och dåliga.

Ref:

REDIGERA - om prestanda

När det gäller prestanda kan optimeraren göra fel - i det här fallet tittade den på statistik for the exact values och kände att indexet inte är till hjälp (kan vara en vändpunktsfråga) så planen är för klusterskanning istället. Det är en konst om huruvida man ska tvinga fram en frågeplan - men att använda ett index är helt klart 50 % snabbare för

  1. specifik hårdvara
  2. specifik tidpunktsdatadistribution
  3. specifika värden anges

Om jag inte hade en väldigt bra anledning skulle jag inte spela Query Optimizer (t.ex. med hjälp av indextips) om jag inte har massor av data som bevisar att det alltid kommer att göra det snabbare.




  1. MySqlParameter som Tabellnamn

  2. Hur ersätter man kommaseparerade avdelnings-ID med respektive namn?

  3. Välj en dynamisk uppsättning kolumner från en tabell och få summan för varje

  4. Hur man HÄMTAR med värdet av en Refcursor-variabel