Nie zawsze jest źle.
Oczywiście pozwala to na odczytanie niezaangażowanych wartości (które mogą zostać wycofane, a zatem nigdy nie istniały logicznie), a także pozwala na takie zjawiska, jak wielokrotne odczytywanie wartości lub wcale.
Jedynymi poziomami izolacji, które gwarantują, że nie napotkasz takich anomalii, jest możliwość serializacji / migawki. W przypadku powtarzalnych wartości odczytu można pominąć, jeśli wiersz zostanie przeniesiony (z powodu aktualizacji klucza), zanim skan osiągnie ten wiersz, w przypadku odczytu zatwierdzonych wartości można odczytać dwukrotnie, jeśli aktualizacja klucza spowoduje przejście do poprzednio odczytanego wiersza.
Prawdopodobieństwo wystąpienia tych problemów jest mniejsze nolock, ponieważ domyślnie na tym poziomie izolacji użyje skanowania z przydzielonym przydziałem, gdy szacuje, że można odczytać więcej niż 64 strony . Oprócz kategorii problemów, które pojawiają się, gdy wiersze przemieszczają się między stronami z powodu aktualizacji klucza indeksu, te uporządkowane skany alokacji są również podatne na problemy z podziałami stron (gdzie wiersze można pominąć, jeśli nowo przydzielona strona znajduje się wcześniej w pliku niż punkt już zeskanowane lub przeczytane dwukrotnie, jeśli już zeskanowana strona jest podzielona na późniejszą stronę w pliku).
Przynajmniej w przypadku prostych zapytań (pojedynczej tabeli) można zniechęcić do korzystania z tych skanów i uzyskać skanowanie z poleceniem klucza nolockpo prostu poprzez dodanie ORDER BY index_keyzapytania do zapytania, tak aby Orderedwłaściwość IndexScanbyła true.
Ale jeśli twoja aplikacja do raportowania nie potrzebuje absolutnie dokładnych liczb i może tolerować większe prawdopodobieństwo takich niespójności, może być do przyjęcia.
Ale z pewnością nie powinieneś odrzucać wszystkich zapytań w nadziei, że będzie to magiczny przycisk „turbo”. Oprócz większego prawdopodobieństwa napotkania nieprawidłowych wyników na tym poziomie izolacji lub braku wyników (błąd „Nie można kontynuować skanowania za pomocą NOLOCK z powodu przenoszenia danych”) istnieją nawet przypadki, w których wydajność nolock może być znacznie gorsza .