Wady:
1. Daje to brudne odczyty
2. Dotyczy tylko wybranych instrukcji zapytań
Zalety:
1. Niektóre pliki twierdzą, że wydajność zapytań SQL z WITH (NOLOCK) może być zwiększona o 33%.
2. Może być używany do wewnętrznych instrukcji łączenia
Brudny odczyt: Użytkownik dokonuje modyfikacji zasobu, a inny użytkownik przypadkowo odczytuje zmodyfikowany rekord, a następnie pierwszy użytkownik rezygnuje z modyfikacji, a dane wracają do poprzedniej modyfikacji – te dwa różne wyniki to nieuczciwe odczyty.
Szczegóły:
Aby poprawić wydajność zapytań SQL, ogólnie rzecz biorąc, pierwszym krokiem jest stworzenie indeksu. W rzeczywistości, oprócz ustalania indeksów, gdy umieszczamy polecenia SQL, dodanie sekcji WITH (NOLOCK) do składni może poprawić zjawisko LOCK-owania zbiorów danych w środowisku z dużą liczbą zapytań online, poprawiając tym samym wydajność zapytań.
Jednak warto zauważyć, że SQL SELECT z (NOLOCK) może powodować Dirty Read.
Na przykład:
Oprócz prostego SELECT możesz także użyć składni SELECT z JOIN. Ale DELETE, INSERT, UPDATE i inne polecenia wymagające transakcji nie są dobre...
Niektóre pliki twierdzą, że wydajność zapytań SQL można zwiększyć o 33% dzięki WITH (NOLOCK). Dodanie WITH (NOLOCK) informuje SQL Server, że nasze polecenie SELECT nie musi uwzględniać stanu blokady transakcji w bieżącej tabeli, więc wydajność zostanie znacznie poprawiona, a zjawisko blokady systemu bazodanowego znacznie ograniczone (w tym martwe zablokowanie).
Warto zauważyć, że ponieważ WITH (NOLOCK) nie uwzględnia blokady transakcji w bieżącej tabeli, więc gdy dane są w wielu fazach (np. transakcje w wielu tabelach – >np. systemy wypłat), WITH (NOLOCK) ignoruje dane, które obecnie przetwarzają proces transakcji...
Mówiąc wprost, używając NoLock, pozwala on odczytać dane, które zostały zmodyfikowane, ale transakcja jeszcze nie została zakończona. Dlatego jeśli musisz wziąć pod uwagę integralność danych transakcyjnych w czasie rzeczywistym, powinieneś dokładnie przemyśleć użycie WITH (NOLOCK).
Jeśli nie musisz brać pod uwagę transakcji, WITH (NOLOCK) może być przydatnym odniesieniem.
Notatka 1: WITH ( < table_hint > ) Określa skanowanie tabeli, jeden lub więcej indeksów używanych przez optymalizator zapytań, Albo przez optymalizator zapytań, aby wykorzystać tę tabelę danych i użyć trybu blokady dla tego zdania (lock).
Uwaga 2: WITH (NOLOCK) jest równoważne READ uncommitted
|