See artikkel on masintõlke peegelartikkel, palun klõpsake siia, et hüpata algse artikli juurde.

Vaade: 10821|Vastuse: 0

[Allikas] sql SELECT

[Kopeeri link]
Postitatud 08.01.2016 17:58:31 | | |

Varem nägin, kuidas mu vanemad arendajad kasutasid SQL Serveris päringuid tehes WITH (NOLOCK) ja mõtlesin, miks nad seda kasutavad. Nüüd uurisin seda ja leidsin, et see on kasulik, et parandada päringu täitmise jõudlust. Kuid selle kasutamisel on ka puudus. Puuduseks on see, et keegi ei pruugi olla kindel, kas ta saab andmed, mida praegu tabelis uuendatakse, st ilma lukustuseta ei saa olla kindel, et andmed ei ole muutub selle aja jooksul, mil päring töötab. Viitasin sellele lingile ja leidsin selle üsna kasulikuks.

SQL-päringute jõudluse parandamiseks on üldiselt esimene samm luua indeks. Tegelikult, lisaks indeksite loomisele, kui paigutame SQL-käske, võib sektsiooni WITH (NOLOCK) lisamine süntaksile parandada andmekogude lukustamise nähtust keskkonnas, kus on palju veebipäringuid, parandades seeläbi päringute jõudlust.

Siiski tasub tähele panna, et SQL SELECT koos (NOLOCK) võib põhjustada räpase lugemise.

Näiteks:




Sest SQL Server teeb vastava luku järjepidevuse kontrolli. Üldise andmebaasipäringute jõudluse parandamiseks lisa WITH (NOLOCK) oma SELECT süntaksi tabeli nime lõppu, kuigi (NOLOCK) on samuti aktsepteeritav, kuid Microsoft soovitab siiski lisada WITH.

Lisaks lihtsale SELECT-ile saad kasutada ka SELECT süntaksit koos JOIN-iga. Aga DELETE, INSERT, UPDATE ja muud käsud, mis nõuavad tehinguid, ei ole head...

Mõned failid ütlevad, et SQL-päringute efektiivsust saab WITH (NOLOCK) abil suurendada 33% võrra.
WITH lisamine (NOLOCK) ütleb SQL Serverile, et meie SELECT käsk ei pea arvestama praeguse tabeli tehinguluku olekut, seega paraneb jõudlus märkimisväärselt ja andmebaasisüsteemi lukustuse nähtus väheneb märkimisväärselt (sh surnud lukustus).

Üks asi, mida tähele panna, on see, et kuna WITH (NOLOCK) ei arvesta praeguse tabeli tehingulukku, siis kui tehingu mitmes faasis on andmeid (nt tehing mitme tabeli vahel – > näiteks väljavõtusüsteem), siis WITH (NOLOCK) ignoreerib andmeid, mis parasjagu tehinguprotsessi töötlevad...

Otse öeldes, NoLocki kasutamisel võimaldab see lugeda andmeid, mis on muudetud, kuid tehingut pole veel lõpetatud. Seega, kui pead arvestama tehinguandmete reaalajas terviklikkusega, peaksid hoolikalt kaaluma WITH (NOLOCK) kasutamist.

Kui tehinguid ei pea kaaluma, võib WITH (NOLOCK) olla kasulik viide.

Märkus 1: KOOS ( < table_hint > )
Määrab tabeliskanni, ühe või mitu indeksit, mida päringu optimeerija kasutab,
Või päringu optimeerija abil kasutada seda andmetabelit ja kasutada lukustusrežiimi selle lause jaoks.

Märkus 2: KOOS (NOLOCK) on ekvivalentne READ UNCOMMITTED

Lõpuks räägime mõnest väikesest erinevusest nolocki ja with(nolock) vahel:
1: Sünonüümid SQL05-s, ainult kui (nolock) on toetatud;
2: koos (nolock) kirjutatakse väga lihtsalt ja seejärel määratakse indeks.
Kui serverite vahel lauseid pärida, ei saa kasutada (nolock), ainult nolockiga
Kui päringuid tehakse samas serveris, saab kasutada nii (nolock) kui ka nolocki
Nagu mis
SQL-kood
select * from [IP].a.dbo.table1 with (nolock) See annab sulle vea valiku * from a.dbo.table1 with (nolock) See töötab




Eelmine:C# peidab ID-numbri keskmise numbri
Järgmine:jquery laadib JS-i ajaxiga
Disclaimer:
Kõik Code Farmer Networki poolt avaldatud tarkvara, programmeerimismaterjalid või artiklid on mõeldud ainult õppimiseks ja uurimistööks; Ülaltoodud sisu ei tohi kasutada ärilistel ega ebaseaduslikel eesmärkidel, vastasel juhul kannavad kasutajad kõik tagajärjed. Selle saidi info pärineb internetist ning autoriõiguste vaidlused ei ole selle saidiga seotud. Ülaltoodud sisu tuleb oma arvutist täielikult kustutada 24 tunni jooksul pärast allalaadimist. Kui sulle programm meeldib, palun toeta originaaltarkvara, osta registreerimist ja saa paremaid ehtsaid teenuseid. Kui esineb rikkumist, palun võtke meiega ühendust e-posti teel.

Mail To:help@itsvse.com