Príznaky
Keď naplníte premennú tabuľky mnohými riadkami a potom ju spojíte s inými tabuľkami, optimalizátor dotazov si môže vybrať neefektívny plán dotazu, čo môže viesť k zníženiu výkonu dotazu.
Riešenie
Po použití tejto rýchlej opravy môžete zapnúť príznak sledovania 2453, ktorý povolí premennej tabuľky spustiť opätovnú kompiláciu, keď sa zmení dostatočný počet riadkov. Optimalizátoru dotazov to môže umožniť vybrať efektívnejší plán.
Tento problém bol prvýkrát opravený v nasledujúcej kumulatívnej aktualizácii alebo balíkoch Service Pack pre SQL Server.
Kumulatívna aktualizácia 3 pre SQL Server 2014 /en-us/help/2984923
Informácie o kumulatívnych aktualizáciách pre SQL Server
Každá nová kumulatívna aktualizácia pre SQL Server obsahuje všetky rýchle opravy a opravy zabezpečenia, ktoré boli zahrnuté v predchádzajúcej kumulatívnej aktualizácii. Pozrite si najnovšie kumulatívne aktualizácie pre SQL Server:
Balík Service Pack 2 pre SQL Server 2012
Informácie o balíkoch Service Pack pre SQL Server
Balíky Service Pack sú kumulatívne. Každý nový balík Service Pack obsahuje všetky opravy, ktoré sa nachádzajú v predchádzajúcich balíkoch Service Pack, spolu so všetkými novými opravami. Odporúčame použiť najnovší balík Service Pack a najnovšiu kumulatívnu aktualizáciu pre daný balík Service Pack. Pred inštaláciou najnovšieho balíka Service Pack nemusíte inštalovať predchádzajúci balík Service Pack. Ďalšie informácie o najnovšom balíku Service Pack a najnovšej kumulatívnej aktualizácii nájdete v tabuľke č. 1 v nasledujúcom článku:
Ako určiť verziu, vydanie a úroveň aktualizácie SQL Server a jeho súčastí
Ďalšie informácie
Keď používate premennú tabuľky v dávke alebo procedúre, dotaz sa skompiluje a optimalizuje na počiatočný prázdny stav premennej tabuľky. Ak sa táto tabuľková premenná vyplní mnohými riadkami v režime runtime, vopred zostavený plán dotazov už nemusí byť optimálny. Dotaz môže napríklad spájať premennú tabuľky s vnorenou slučkou, keďže je zvyčajne efektívnejšia pre malý počet riadkov. Tento plán dotazov môže byť neefektívny, ak premenná tabuľky obsahuje milióny riadkov. Hash spojenie môže byť za takýchto podmienok lepšou voľbou. Ak chcete získať nový plán dotazov, je ho potrebné znovu skompilovať. Na rozdiel od tabuliek iných používateľov alebo dočasných tabuliek však zmena počtu riadkov v premennej tabuľky nespustí opätovné kompilovanie dotazu. Zvyčajne to môžete obísť pomocou funkcie OPTION (RECOMPILE), ktorá má svoje vlastné režijné náklady.
Príznak sledovania 2453 umožňuje výhodu opätovného kompilovania dotazu bez funkcie OPTION (RECOMPILE). Tento príznak sledovania sa líši od možnosti OPTION (REKOMPILOVAŤ) v dvoch hlavných aspektoch.
(1) Používa rovnakú prahovú hodnotu počtu riadkov ako ostatné tabuľky. Dotaz nemusí byť kompilovaný pre každé spustenie, na rozdiel od funkcie OPTION (RECOMPILE). Opätovné kompilovanie sa spustí iba vtedy, keď zmena počtu riadkov prekročí preddefinovanú prahovú hodnotu.
(2) OPTION (RECOMPILE) vynúti dotaz zobraziť parametre a optimalizovať dotaz pre ne. Tento príznak trasovania nevynucuje náhľad parametrov.
Všimnite si, že tento príznak sledovania musí byť v režime runtime zapnutý. Tento príznak sledovania nie je možné použiť s funkciou QUERYTRACEON. Tento príznak sledovania je potrebné používať opatrne, pretože môže zvýšiť počet opätovných kompilácií dotazov, čo môže stáť viac ako len ušetriť lepšie optimalizácie dotazov.
Stav
Spoločnosť Microsoft potvrdila, že ide o problém v produktoch spoločnosti Microsoft, ktoré sú uvedené v časti Vzťahuje sa na.