Ulemper:
1. Det vil give beskidt læsning
2. Gælder kun for udvalgte forespørgselsudsagn
Fordele:
1. Nogle filer siger, at SQL-forespørgselseffektiviteten med WITH (NOLOCK) kan øges med 33%.
2. Kan bruges til indre join-udsagn
Dirty read: En bruger foretager en ændring i en ressource, og en anden bruger læser tilfældigvis den ændrede post, hvorefter den første bruger opgiver ændringen, og dataene vender tilbage til den forrige modifikation; disse to forskellige resultater er dirty reading.
Detaljer:
For at forbedre SQL-forespørgselsydelsen er det første formål generelt at oprette et indeks. Faktisk, ud over etableringen af indekser, kan tilføjelsen af en sektion WITH (NOLOCK) til syntaksen forbedre fænomenet med datasæt, der bliver LOCKet i et miljø med et stort antal online forespørgsler, og dermed forbedre forespørgselsydelsen.
Dog skal man bemærke, at SQL SELECT med (NOLOCK) kan forårsage Dirty Read.
For eksempel:
Ud over simpel SELECT kan du også bruge SELECT-syntaks med JOIN. Men DELETE, INSERT, UPDATE og andre kommandoer, der kræver transaktioner, er ikke gode...
Nogle filer siger, at effektiviteten af SQL-forespørgsler kan øges med 33 % med WITH (NOLOCK). Tilføjelsen af WITH (NOLOCK) fortæller SQL Server, at vores SELECT-kommando ikke behøver at tage højde for transaktionslåsetilstanden for den aktuelle tabel, så ydeevnen vil blive væsentligt forbedret, og låsefænomenet i databasesystemet vil blive væsentligt reduceret (inklusive deadlock).
En ting at bemærke er, at fordi WITH (NOLOCK) ikke tager højde for transaktionslåsen for den aktuelle tabel, så når der er data i flere faser (f.eks. transaktioner på tværs af flere tabeller – >f.eks. udbetalingssystemer), ignorerer WITH (NOLOCK) de data, der aktuelt behandler transaktionsprocessen...
For at sige det ligeud, det vil sige, når man bruger NoLock, tillader det at læse data, der er blevet ændret, men hvor transaktionen endnu ikke er gennemført. Derfor, hvis du skal overveje transaktionsdatas realtidsintegritet, bør du overveje nøje at bruge WITH (NOLOCK).
Hvis du ikke behøver at overveje transaktioner, kan WITH (NOLOCK) være en nyttig reference.
Note 1: MED ( < table_hint > ) Angiver tabelscanningen, et eller flere indekser brugt af forespørgselsoptimereren, Eller ved forespørgselsoptimeringen til at udnytte denne datatabel og bruge låsetilstanden til denne sætning.
Note 2: WITH (NOLOCK) svarer til READ UNCOMMITTED
|