2012-02-02 6 views
7

jestem coraz wierszy w innej kolejności, gdy używamDlaczego "USTAWIĆ POZIOM IZOLACJI USTAWIEŃ TRANSAKCJI CZYTA NIEKOMMITOWANY" zwraca wiersze w innej kolejności?

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED 

w moim procedury przechowywanej.

Poniżej znajduje się zapytanie zdefiniowane w procedurze przechowywanej.

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; 

SELECT CaseRateDetailId,AmtPerWeek 
FROM CaseRateDetails 
WHERE CaseRateInfoId = @CaseRateInfoId 

Zwraca AmtPerWeek tak:

10000,15000,5000,20000,25000,.. 

Kiedy uruchomić tę samą kwerendę bez użycia

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED 

oświadczenie zwraca wiersze w odpowiedniej kolejności tj 5000,10000,15000,20000,25000,....

Mogę użyć polecenia klauzula AmtPerWeek w powyższym zapytaniu, ale chcę znać dlaczego tak się zachowuje? Dlaczego zmienia kolejność rzędów?

+8

Nie ma ** poprawnego ** zamówienia bez klauzuli zamówienia. –

+3

Brak "ZAMÓWIENIA" -> nie ma zdefiniowanej lub gwarantowanej lub ukrytej kolejności - jeśli potrzebujesz zamówienia, musisz mieć "ZAMÓWIENIE PRZEZ" - ** zawsze. ** –

+4

+1 dla "ale chcę znać powód, dlaczego tak się zachowuje. " –

Odpowiedz

10

Pod NOLOCK lub TABLOCK można uzyskać allocation ordered scan, który odczytuje strony w kolejności plików, zamiast podążać za poziomem liścia indeksu.

Nie pojawia się w planie wykonania, niezależnie od tego, czy korzysta z tej metody. Bez ORDER BY żadne zamówienie nie jest gwarantowane.

+0

To fascynujące - masz rację, że nie pojawia się w showplanie. Usunąłem moją odpowiedź, ponieważ udowodniłeś, że to było złe. – Ben

+1

@Ben - Kiedy plan pokazuje skanowanie indeksu z 'Zamówione: fałszuj" silnik relacyjny wskazuje, że nie obchodzi go, w jakiej kolejności są zwracane wiersze, co oznacza, że ​​mechanizm magazynowania uzna to za preferowaną opcję dla indeksów> 64 strony i gdzie dane nie mogą się zmienić (tablock) lub poziom izolacji jest taki, że woli szybkość od jakiejkolwiek gwarancji spójności. Skany uporządkowane przy zamówieniu z alokacją znacznie częściej tracą wiersze lub czytają wiersze dwa razy w warunkach równoległych modyfikacji danych niż skanowanie z indeksem. –

+0

Woah, niezły haczyk! – Alexandre

Powiązane problemy