Šis straipsnis yra veidrodinis mašininio vertimo straipsnis, spauskite čia norėdami pereiti prie originalaus straipsnio.

Rodinys: 11079|Atsakyti: 1

[Šaltinis] MSSQL SU (NOLOCK) nešvariu skaitymu

[Kopijuoti nuorodą]
Publikuota: 2020-4-3 10:06:04 | | |
Minusai:

1. Tai sukels nešvarų skaitymą

2. Taikoma tik pasirinktiems užklausos teiginiams

Argumentai už:

1. Kai kurie failai sako, kad SQL užklausos efektyvumas su SU (NOLOCK) gali būti padidintas 33%.

2. Gali būti naudojamas vidiniams sujungimo teiginiams

Nešvarus skaitymas: vartotojas modifikuoja išteklius, o kitas vartotojas perskaito modifikuotą įrašą, o tada pirmasis vartotojas atsisako modifikacijos, o duomenys grįžta į ankstesnę modifikaciją, šie du skirtingi rezultatai yra nešvarūs skaitymai.

Išsami informacija:

Norint pagerinti SQL užklausos našumą, pirmiausia reikia sukurti indeksą. Tiesą sakant, be indeksų nustatymo, kai dedame SQL komandas, prie sintaksės pridedant skyrių WITH (NOLOCK) galima pagerinti duomenų rinkinių LOCKed reiškinį aplinkoje, kurioje yra daug internetinių užklausų, taip pagerinant užklausos našumą.

Tačiau reikia atkreipti dėmesį į tai, kad SQL SELECT su (NOLOCK) gali sukelti nešvarų skaitymą.

Pavyzdžiui:

Be paprasto SELECT, taip pat galite naudoti SELECT sintaksę su JOIN. Tačiau IŠTRINTI, ĮTERPTI, ATNAUJINTI ir kitos komandos, kurioms reikalingos operacijos, nėra geros...


Kai kuriuose failuose teigiama, kad SQL užklausos efektyvumas gali būti padidintas 33% naudojant WITH (NOLOCK).
Pridėjus WITH (NOLOCK), SQL serveris sako, kad mūsų komandai SELECT nereikia atsižvelgti į dabartinės lentelės operacijų užrakto būseną, todėl našumas bus žymiai pagerintas, o duomenų bazės sistemos užrakto reiškinys žymiai sumažės (įskaitant aklavietę).

Vienas dalykas, į kurį reikia atkreipti dėmesį, yra tai, kad kadangi WITH (NOLOCK) neatsižvelgia į dabartinės lentelės operacijų užraktą, taigi, kai yra tam tikrų duomenų, kurie yra keliose fazėse (pvz., sandoriai keliose lentelėse - >pvz., išėmimo sistemos), WITH (NOLOCK) ignoruoja duomenis, kurie šiuo metu apdoroja operacijos procesą...

Tiesiai šviesiai tariant, tai yra, naudojant "NoLock", jis leidžia nuskaityti duomenis, kurie buvo pakeisti, bet operacija dar nebaigta. Todėl, jei jums reikia atsižvelgti į operacijų duomenų vientisumą realiuoju laiku, turėtumėte gerai pagalvoti apie WITH (NOLOCK) naudojimą.

Jei jums nereikia svarstyti operacijų, WITH (NOLOCK) gali būti naudinga nuoroda.

1 pastaba: SU ( < table_hint > )
Nurodo lentelės nuskaitymą, vieną ar daugiau indeksų, kuriuos naudoja užklausų optimizavimo priemonė,
Arba užklausų optimizavimo priemonė, kad panaudotų šią duomenų lentelę ir naudotų šio teiginio užrakto režimą.

2 pastaba: WITH (NOLOCK) yra lygiavertis READ UNCOMMITTED





Ankstesnis:Duomenų bazės pagrindinio-pavaldinio delsa lemia netikslų užklausų sprendimą
Kitą:Išspręsta problema, kad smuikininkas negalėjo nuskaityti vietinio localhost, 127.0.0.1 tinklo užklausų
Publikuota: 2020-4-5 14:21:36 |
Atsakomybės apribojimas:
Visa programinė įranga, programavimo medžiaga ar straipsniai, kuriuos skelbia Code Farmer Network, yra skirti tik mokymosi ir mokslinių tyrimų tikslams; Aukščiau nurodytas turinys negali būti naudojamas komerciniais ar neteisėtais tikslais, priešingu atveju vartotojai prisiima visas pasekmes. Šioje svetainėje pateikiama informacija gaunama iš interneto, o ginčai dėl autorių teisių neturi nieko bendra su šia svetaine. Turite visiškai ištrinti aukščiau pateiktą turinį iš savo kompiuterio per 24 valandas nuo atsisiuntimo. Jei jums patinka programa, palaikykite autentišką programinę įrangą, įsigykite registraciją ir gaukite geresnes autentiškas paslaugas. Jei yra kokių nors pažeidimų, susisiekite su mumis el. paštu.

Mail To:help@itsvse.com