Denna artikel är en spegelartikel om maskinöversättning, klicka här för att hoppa till originalartikeln.

Utsikt: 10821|Svar: 0

[Källa] sql SELECT

[Kopiera länk]
Publicerad på 2016-01-08 17:58:31 | | |

Jag brukade se mina seniora utvecklare använda WITH (NOLOCK) när de sökte i SQL Server och undrar varför de använder. Nu har jag undersökt det och funnit att det är användbart för att förbättra prestandan vid att köra frågan. Det finns dock en nackdel med att använda det. Nackdelen är att man kanske inte är säker på att man får den data som just nu uppdateras i tabellen, dvs. utan låsskydd kan man inte vara säker på att datan inte är det ändras under tiden som frågan körs. Jag hänvisade till den här länken och tyckte den var ganska användbar.

För att förbättra prestandan för SQL-frågor är generellt sett det första att överväga att skapa ett index. Faktum är att utöver att etablera index, när vi placerar SQL-kommandon, kan tillägg av en sektion WITH (NOLOCK) i syntaxen förbättra fenomenet att dataset LOCK:as i en miljö med ett stort antal online-frågor, vilket därmed förbättrar frågeprestandan.

En sak att notera är dock att SQL SELECT med (NOLOCK) kan orsaka en smutsig läsning.

Till exempel:




Eftersom SQL Server utför motsvarande låskonsistenskontroll. För att förbättra den övergripande prestandan för databasfrågor, lägg till WITH (NOLOCK) i slutet av tabellnamnet i din SELECT-syntax, även om (NOLOCK) också är acceptabelt, men Microsoft rekommenderar ändå att lägga till WITH.

Förutom enkel SELECT kan du också använda SELECT-syntaxen med JOIN. Men DELETE, INSERT, UPDATE och andra kommandon som kräver transaktioner är inte bra...

Vissa filer säger att effektiviteten i SQL-frågor kan ökas med 33 % med WITH (NOLOCK).
Att lägga till WITH (NOLOCK) talar om för SQL Server att vårt SELECT-kommando inte behöver ta hänsyn till transaktionslåstillståndet för den aktuella tabellen, så prestandan kommer att förbättras avsevärt, och låsfenomenet i databassystemet kommer att minska avsevärt (inklusive deadlock).

En sak att notera är att eftersom WITH (NOLOCK) inte tar hänsyn till transaktionslås för den aktuella tabellen, så när det finns data i flera faser av en transaktion (t.ex. en transaktion mellan flera tabeller – > som ett uttagssystem), kommer WITH (NOLOCK) att ignorera den data som för närvarande bearbetar transaktionsprocessen...

För att uttrycka det rakt på sak, det vill säga, när man använder NoLock tillåter det att läsa data som har ändrats men transaktionen ännu inte är slutförd. Därför, om du behöver överväga transaktionsdatas realtidsintegritet, bör du noga överväga att använda WITH (NOLOCK).

Om du inte behöver ta hänsyn till transaktioner kan WITH (NOLOCK) vara en användbar referens.

Not 1: MED ( < table_hint > )
Specificerar tabellskanningen, ett eller flera index som används av frågeoptimeraren,
Eller av frågeoptimeraren för att använda denna datatabell och använda låsläget för detta påstående.

Not 2: WITH (NOLOCK) motsvarar READ UNCOMMITTED

Slutligen, låt oss prata om några små skillnader mellan nolock och with(nolock):
1: Synonymer i SQL05, endast med (nolock), stöds;
2: med (nolock) skrivs mycket enkelt och sedan specificeras indexet.
När du frågar satser mellan servrar kan du inte använda med (nolock), endast nolock
När man söker på samma server kan både med (nolock) och nolock användas
Som vad
SQL-kod
välj * från [IP].a.dbo.table1 med (nolock) Detta kommer att ge dig felet select * från a.dbo.table1 med (nolock) Detta fungerar




Föregående:C# döljer den mellersta siffran i ID-numret
Nästa:jquery laddar JS med Ajax
Friskrivning:
All programvara, programmeringsmaterial eller artiklar som publiceras av Code Farmer Network är endast för lärande- och forskningsändamål; Ovanstående innehåll får inte användas för kommersiella eller olagliga ändamål, annars kommer användarna att bära alla konsekvenser. Informationen på denna sida kommer från internet, och upphovsrättstvister har inget med denna sida att göra. Du måste helt radera ovanstående innehåll från din dator inom 24 timmar efter nedladdning. Om du gillar programmet, vänligen stöd äkta programvara, köp registrering och få bättre äkta tjänster. Om det finns något intrång, vänligen kontakta oss via e-post.

Mail To:help@itsvse.com