sql >> Databasteknik >  >> RDS >> Sqlserver

ALTERNATIV (OMKOMPILERA) är alltid snabbare; Varför?

Det finns tillfällen att använda OPTION(RECOMPILE) är vettigt. Enligt min erfarenhet är den enda gången detta är ett genomförbart alternativ när du använder dynamisk SQL. Innan du undersöker om detta är vettigt i din situation skulle jag rekommendera att du bygger om din statistik. Detta kan göras genom att köra följande:

EXEC sp_updatestats

Och sedan återskapa din genomförandeplan. Detta säkerställer att när din genomförandeplan skapas kommer den att använda den senaste informationen.

Lägger till OPTION(RECOMPILE) bygger om exekveringsplanen varje gång din fråga körs. Jag har aldrig hört något som beskrivs som creates a new lookup strategy men vi kanske bara använder olika termer för samma sak.

När en lagrad procedur skapas (jag misstänker att du anropar ad-hoc sql från .NET men om du använder en parametriserad fråga så slutar detta med att bli ett lagrat proc-anrop) försöker SQL Server att fastställa den mest effektiva exekveringsplanen för denna fråga baserat på data i din databas och parametrarna som skickas in (parametersniffning), och cachar sedan denna plan. Det betyder att om du skapar frågan där det finns 10 poster i din databas och sedan kör den när det finns 100 000 000 poster kanske den cachade exekveringsplanen inte längre är den mest effektiva.

Sammanfattningsvis - jag ser ingen anledning till att OPTION(RECOMPILE) skulle vara en fördel här. Jag misstänker att du bara behöver uppdatera din statistik och din genomförandeplan. Att bygga om statistik kan vara en viktig del av DBA-arbetet beroende på din situation. Om du fortfarande har problem efter att ha uppdaterat din statistik skulle jag föreslå att du lägger upp båda genomförandeplanerna.

Och för att svara på din fråga - ja, jag skulle säga att det är högst ovanligt att ditt bästa alternativ är att kompilera om genomförandeplanen varje gång du kör frågan.



  1. SQL MELLAN Operatör för nybörjare

  2. Sammanfoga flera resultatrader i en kolumn till en, gruppera efter en annan kolumn

  3. Anslut till mysql i en dockningsbehållare från värden

  4. Hur avinstallerar du MySQL från Mac OS X?