Nevýhody:
1. Bude to produkovať špinavé čítanie
2. Platí len pre vybrané dotazové výroky
Výhody:
1. Niektoré súbory uvádzajú, že efektivita SQL dotazov pomocou WITH (NOLOCK) môže byť zvýšená o 33 %.
2. Môže byť použitý pre vnútorné spojovacie príkazy
Špinavé čítanie: Používateľ urobí úpravu na zdroji, a iný používateľ náhodou prečíta upravený záznam, potom prvý používateľ zmenu vzdá a dáta sa vrátia na predchádzajúcu úpravu, tieto dva odlišné výsledky sú špinavé čítanie.
Podrobnosti:
Na zlepšenie výkonu SQL dotazov je vo všeobecnosti prvou úvahou vytvorenie indexu. V skutočnosti, okrem vytvorenia indexov, keď umiestňujeme SQL príkazy, pridanie sekcie WITH (NOLOCK) do syntaxe môže zlepšiť fenomén LOCKovania dátových súborov v prostredí s veľkým počtom online dotazov, čím sa zlepšuje výkon dotazov.
Avšak treba si uvedomiť, že SQL SELECT s (NOLOCK) môže spôsobiť Dirty Read.
Napríklad:
Okrem jednoduchého SELECT môžete použiť aj syntax SELECT s JOIN. Ale príkazy DELETE, INSERT, UPDATE a ďalšie príkazy, ktoré vyžadujú transakcie, nie sú dobré...
Niektoré súbory uvádzajú, že efektivita SQL dotazov sa dá zvýšiť o 33 % pomocou WITH (NOLOCK). Pridaním WITH (NOLOCK) hovorí SQL Serveru, že náš príkaz SELECT nemusí zohľadňovať stav uzamknutia transakcie v aktuálnej tabuľke, takže výkon sa výrazne zlepší a jav zámkov databázového systému sa výrazne zníži (vrátane slepého zámku).
Jedna vec, ktorú treba poznamenať, je, že pretože WITH (NOLOCK) nezohľadňuje transakčný zámok aktuálnej tabuľky, takže keď sú niektoré dáta vo viacerých fázach (napr. transakcie cez viaceré tabuľky – >napr. systémy výberu), WITH (NOLOCK) ignoruje dáta, ktoré práve spracovávajú transakčný proces...
Jednoducho povedané, pri použití NoLocku umožňuje čítať dáta, ktoré boli upravené, ale transakcia ešte nebola dokončená. Preto, ak potrebujete zohľadniť integritu transakčných dát v reálnom čase, mali by ste dôkladne zvážiť použitie WITH (NOLOCK).
Ak nemusíte brať do úvahy transakcie, WITH (NOLOCK) môže byť užitočnou referenciou.
Poznámka 1: WITH ( < table_hint > ) Špecifikuje prehľad tabuľky, jeden alebo viac indexov používaných optimalizátorom dotazu, Alebo optimalizátorom dotazov, ktorý využije túto dátovú tabuľku a použije režim zámku pre tento výrok.
Poznámka 2: WITH (NOLOCK) je ekvivalentné READ uncommitted
|