Es agrāk redzēju, ka mani vecākie izstrādātāji izmanto WITH (NOLOCK), vaicājot SQL Server, un brīnījos, kāpēc viņi to izmanto. Tagad es to izpētīju un atklāju, ka ir noderīgi uzlabot vaicājuma izpildes veiktspēju. Tomēr tā izmantošanai ir trūkums. Trūkums ir tāds, ka var nebūt pārliecināts, ka viņi saņem datus, kas pašlaik tiek atjaunināti tabulā, ti, Bez bloķēšanas aizsardzības, jūs nevarat garantēt, ka dati nav mainās vaicājuma izpildes laikā. Es atsaucos uz šo saiti un uzskatīju, ka tā ir diezgan noderīga.
Lai uzlabotu SQL vaicājumu veiktspēju, vispirms ir jāizveido indekss. Faktiski, papildus indeksu izveidei, ievietojot SQL komandas, sintaksei pievienojot sadaļu WITH (NOLOCK), var uzlabot datu kopu LOCKed parādību vidē ar lielu skaitu tiešsaistes vaicājumu, tādējādi uzlabojot vaicājuma veiktspēju.
Tomēr jāņem vērā, ka SQL SELECT ar (NOLOCK) var izraisīt netīru lasīšanu.
Piemēram:
Tā kā SQL Server veic atbilstošo bloķēšanas konsekvences pārbaudi. Lai uzlabotu vispārējo datu bāzes vaicājuma veiktspēju, pievienojiet WITH (NOLOCK) tabulas nosaukuma beigās savā SELECT sintaksē, lai gan (NOLOCK) arī ir pieņemams, bet Microsoft joprojām iesaka pievienot WITH.
Papildus vienkāršajai funkcijai SELECT varat izmantot arī SELECT sintaksi ar JOIN. Bet DZĒST, IEVIETOT, ATJAUNINĀT un citas komandas, kurām nepieciešami darījumi, nav labas...
Daži faili saka, ka SQL vaicājumu efektivitāti var palielināt par 33% ar WITH (NOLOCK). Pievienojot WITH (NOLOCK), SQL Server norāda, ka mūsu komandai SELECT nav jāņem vērā pašreizējās tabulas darījumu bloķēšanas stāvoklis, tāpēc veiktspēja tiks ievērojami uzlabota, un datu bāzes sistēmas bloķēšanas parādība ievērojami samazināsies (ieskaitot strupceļa bloķēšanu).
Viena lieta, kas jāatzīmē, ir tā, ka, tā kā WITH (NOLOCK) neņem vērā pašreizējās tabulas darījumu bloķēšanu, tāpēc, ja ir daži dati vairākās darījuma fāzēs (piemēram, darījums vairākās tabulās - > piemēram, izņemšanas sistēma), WITH (NOLOCK) ignorēs datus, kas pašlaik apstrādā darījuma procesu ...
Atklāti sakot, tas ir, izmantojot NoLock, tas ļauj lasīt datus, kas ir modificēti, bet darījums vēl nav pabeigts. Tāpēc, ja jums ir jāapsver darījumu datu integritāte reāllaikā, jums rūpīgi jāpārdomā WITH (NOLOCK) izmantošana.
Ja jums nav jāapsver darījumi, WITH (NOLOCK) var būt noderīga atsauce.
1. piezīme: AR ( < table_hint > ) Norāda tabulas skenēšanu, vienu vai vairākus indeksus, ko izmanto vaicājumu optimizētājs, Vai vaicājumu optimizētājs, lai izmantotu šo datu tabulu un izmantotu bloķēšanas režīmu šim apgalvojumam.
2. piezīme: AR (NOLOCK) ir ekvivalents READ UNCOMMITTED
Visbeidzot, parunāsim par dažām nelielām atšķirībām starp nolock un with(nolock): 1: Sinonīmi SQL05, tiek atbalstīts tikai ar (nolock); 2: ar (nolock) ir rakstīts ļoti viegli un pēc tam norādiet indeksu. Vaicājot priekšrakstus serveros, nevar izmantot ar (nolock), tikai nolock Veicot vaicājumus vienā serverī, var izmantot gan ar (nolock), gan nolock Piemēram, kas SQL kods atlasiet * no [IP].a.dbo.table1 ar (nolock) Tas parādīs kļūdu atlasiet * no a.dbo.table1 ar (nolock) Tas darbosies |