Denne artikel er en spejling af maskinoversættelse, klik venligst her for at springe til den oprindelige artikel.

Udsigt: 10821|Svar: 0

[Kilde] sql SELECT

[Kopier link]
Opslået på 08/01/2016 17.58.31 | | |

Jeg plejede at se mine seniorudviklere bruge WITH (NOLOCK), når de forespørgsler i SQL Server, og jeg undrer mig over, hvorfor de bruger det. Nu har jeg undersøgt det og fundet ud af, at det er nyttigt til at forbedre ydeevnen i udførelsen af forespørgslen. Der er dog en ulempe ved at bruge det. Ulempen er, at man måske ikke er sikker på, at man får de data, der aktuelt opdateres i tabellen, dvs. uden låsebeskyttelse kan man ikke garantere, at dataene ikke er det ændrer sig i den periode, hvor forespørgslen kører. Jeg henviste til dette link og fandt det ret nyttigt.

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 er det vigtigt at bemærke, at SQL SELECT med (NOLOCK) kan forårsage en beskidt læsning.

For eksempel:




Fordi SQL Server udfører den tilsvarende låskonsistenskontrol. For at forbedre den samlede databaseforespørgselsydelse, tilføj WITH (NOLOCK) til slutningen af tabelnavnet i din SELECT-syntaks, selvom (NOLOCK) også er acceptabelt, men Microsoft anbefaler stadig at tilføje WITH.

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 af en transaktion (f.eks. en transaktion på tværs af flere tabeller – > som et udbetalingssystem), vil WITH (NOLOCK) ignorere 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

Lad os til sidst tale om nogle små forskelle mellem nolock og with(nolock):
1: Synonymer i SQL05, kun med (nolock), understøttes;
2: med (nolock) skrives meget nemt og derefter specificeres indekset.
Når du forespørger sætninger på tværs af servere, kan du ikke bruge med (nolock), kun nolock
Når man forespørger på samme server, kan både med (nolock) og nolock bruges
Som hvad
SQL-kode
vælg * fra [IP].a.dbo.table1 med (nolock) Dette vil give dig fejlen select * fra a.dbo.table1 med (nolock) Det vil virke




Tidligere:C# skjuler det midterste ciffer i ID-nummeret
Næste:jquery indlæser JS med AJAX
Ansvarsfraskrivelse:
Al software, programmeringsmaterialer eller artikler udgivet af Code Farmer Network er kun til lærings- og forskningsformål; Ovenstående indhold må ikke bruges til kommercielle eller ulovlige formål, ellers skal brugerne bære alle konsekvenser. Oplysningerne på dette site kommer fra internettet, og ophavsretstvister har intet med dette site at gøre. Du skal slette ovenstående indhold fuldstændigt fra din computer inden for 24 timer efter download. Hvis du kan lide programmet, så understøt venligst ægte software, køb registrering og få bedre ægte tjenester. Hvis der er nogen overtrædelse, bedes du kontakte os via e-mail.

Mail To:help@itsvse.com