Včasih sem videl, da moji starejši razvijalci uporabljajo WITH (NOLOCK) pri poizvedbah v SQL Serverju in se sprašujem, zakaj jih uporabljajo. Zdaj sem to raziskal in ugotovil, da je koristno za izboljšanje zmogljivosti pri izvajanju poizvedbe. Vendar pa ima uporaba tudi slabost. Slabost pa je, da morda niste prepričani, ali dobivate podatke, ki se trenutno posodabljajo v tabeli, torej brez zaklepne zaščite ne morete zagotoviti, da podatki niso spreminja se med izvajanjem poizvedbe. Skliceval sem se na to povezavo in se mi je zdela precej uporabna.
Za izboljšanje zmogljivosti SQL poizvedb je na splošno prva stvar ustvariti indeks. Pravzaprav lahko poleg vzpostavitve indeksov, ko postavimo SQL ukaze, dodajanje razdelka WITH (NOLOCK) v sintakso izboljša pojav zaklepanja podatkovnih nizov v okolju z velikim številom spletnih poizvedb, s čimer se izboljša zmogljivost poizvedb.
Vendar pa je treba vedeti, da lahko SQL SELECT z (NOLOCK) povzroči umazano branje.
Na primer:
Ker SQL Server izvaja ustrezno preverjanje skladnosti zaklepov. Za izboljšanje splošne zmogljivosti poizvedb v bazi podatkov dodajte WITH (NOLOCK) na konec imena tabele v vaši SELECT sintaksi, čeprav je (NOLOCK) prav tako sprejemljivo, vendar Microsoft vseeno priporoča dodajanje WITH.
Poleg preprostega SELECT lahko uporabite tudi sintakso SELECT z JOIN. Ampak DELETE, INSERT, UPDATE in drugi ukazi, ki zahtevajo transakcije, niso dobri...
Nekatere datoteke pravijo, da se učinkovitost SQL poizvedb lahko poveča za 33 % z WITH (NOLOCK). Dodajanje WITH (NOLOCK) pove SQL Serverju, da naš ukaz SELECT ne potrebuje upoštevati stanja zaklepanja transakcij v trenutni tabeli, zato bo zmogljivost bistveno izboljšana, pojav zaklepanja v podatkovnem sistemu pa znatno zmanjšan (vključno z mrtvo zaklepanostjo).
Pomembno je vedeti, da ker WITH (NOLOCK) ne upošteva zaklepa transakcije v trenutni tabeli, zato, ko so nekateri podatki v več fazah transakcije (npr. transakcija v več tabelah – > kot je sistem dviga), WITH (NOLOCK) ignorira podatke, ki trenutno obdelujejo proces transakcije...
Preprosto povedano, pri uporabi NoLocka omogoča branje podatkov, ki so bili spremenjeni, vendar transakcija še ni bila zaključena. Zato, če morate upoštevati integriteto transakcijskih podatkov v realnem času, dobro premislite o uporabi WITH (NOLOCK).
Če transakcij ni treba upoštevati, je lahko koristna referenca WITH (NOLOCK).
Opomba 1: WITH ( < table_hint > ) Določa pregled tabele, enega ali več indeksov, ki jih uporablja optimizator poizvedb, Ali pa z optimizatorjem poizvedb, da izkoristiš to podatkovno tabelo in uporabiš način zaklepanja za to izjavo.
Opomba 2: WITH (NOLOCK) je ekvivalent READ UNCOMMITTED
Na koncu se pogovorimo o nekaj majhnih razlikah med nolockom in with(nolock): 1: Sopomenke v SQL05 so podprte le z (nolock); 2: z (nolock) se zapiše zelo enostavno in nato določi indeks. Pri poizvedbah po stavkih po strežnikih ne morete uporabljati z (nolock), samo z nolockom Pri poizvedbah na istem strežniku je mogoče uporabiti tako (nolock) kot nolock Kaj na primer SQL koda select * from [IP].a.dbo.table1 z (nolock) To vas bo pozvalo z napako select * from a.dbo.table1 z (nolock) To bo delovalo |