W planie wykonania programu SQL Server jaka jest różnica między skanowaniem indeksu a przeszukiwaniem indeksu
Jestem na SQL Server 2005.
Odpowiedzi:
Skanowanie indeksu polega na tym, że serwer SQL odczytuje cały indeks w poszukiwaniu dopasowań - czas potrzebny na to jest proporcjonalny do rozmiaru indeksu.
Wyszukiwanie indeksu polega na tym, że serwer SQL używa struktury b-drzewa indeksu do wyszukiwania bezpośrednio pasujących rekordów (zobacz http://mattfleming.com/node/192, aby dowiedzieć się, jak to działa) - czas potrzebny jest tylko proporcjonalny do liczba pasujących rekordów.
Podstawową zasadą, której należy przestrzegać, jest to, że skany są złe, poszukiwania są dobre.
Skanowanie indeksów
Kiedy SQL Server wykonuje skanowanie, ładuje obiekt, który chce odczytać z dysku do pamięci, a następnie czyta ten obiekt od góry do dołu, szukając potrzebnych rekordów.
Szukaj w indeksie
Kiedy SQL Server szuka danych, wie, gdzie w indeksie znajdą się dane, więc ładuje indeks z dysku, przechodzi bezpośrednio do części indeksu, której potrzebuje i czyta tam, gdzie kończą się potrzebne dane . Jest to oczywiście znacznie wydajniejsza operacja niż skanowanie, ponieważ SQL już wie, gdzie znajdują się poszukiwane dane.
Jak mogę zmodyfikować plan wykonania, aby użyć wyszukiwania zamiast skanowania?
Kiedy SQL Server szuka twoich danych, prawdopodobnie jedną z największych rzeczy, które spowodują, że SQL Server przełączy się z wyszukiwania do skanowania, jest sytuacja, gdy niektóre kolumny, których szukasz, nie są uwzględnione w indeksie, którego chcesz użyć. Najczęściej SQL Server cofnie się do wykonania skanowania indeksu klastrowego, ponieważ indeks klastrowany zawiera wszystkie kolumny w tabeli. Jest to jeden z największych powodów (przynajmniej moim zdaniem), dla których mamy teraz możliwość WŁĄCZANIA kolumn do indeksu, bez dodawania tych kolumn do indeksowanych kolumn indeksu. Uwzględniając dodatkowe kolumny w indeksie, zwiększamy rozmiar indeksu, ale umożliwiamy SQL Server odczyt indeksu bez konieczności powrotu do indeksu klastrowego lub do samej tabeli, aby uzyskać te wartości.
Bibliografia
Aby uzyskać informacje dotyczące specyfiki każdego z tych operatorów w planie wykonania programu SQL Server, zobacz ....
W przypadku skanowania indeksu wszystkie wiersze indeksu są skanowane w celu znalezienia pasującego wiersza. Może to być wydajne w przypadku małych stołów. W przypadku wyszukiwania indeksu wystarczy dotknąć wierszy, które faktycznie spełniają kryteria, a więc jest ogólnie bardziej wydajne
Skanowanie indeksu ma miejsce, gdy definicja indeksu nie może znaleźć się w jednym wierszu, aby spełnić predykaty wyszukiwania. W takim przypadku SQL Server musi skanować wiele stron, aby znaleźć zakres wierszy spełniających predykaty wyszukiwania.
W przypadku przeszukiwania indeksu SQL Server znajduje jeden wiersz pasujący do predykatów wyszukiwania przy użyciu definicji indeksu .
Wyszukiwanie indeksowe jest lepsze i skuteczniejsze.
Skan dotyka każdego wiersza w tabeli, nawet jeśli tego szukasz, czy nie
Poszukiwanie patrzy tylko na rzędy, których szukasz.
Poszukiwania są zawsze lepsze niż skanowanie, ponieważ są one bardziej wydajne w sposobie wyszukiwania danych.
Dobre wyjaśnienie można znaleźć tutaj