| Termin | Definicja |
|---|---|
| Hash Index | Hash Index to typ indeksu wykorzystujący funkcję skrótu do szybkiego lokalizowania danych w tabelach In-Memory. Jak działa Hash Index w tabeli In-MemoryHash Index w Microsoft SQL Server jest rodzajem indeksu nieklastrowanego przeznaczonego dla tabel zoptymalizowanych pod kątem pamięci, czyli tabel używających mechanizmu In-Memory OLTP. Indeks nie przechowuje uporządkowanej listy kluczy tak jak indeks oparty na drzewie B. Dla wartości klucza obliczana jest wartość funkcji skrótu, a następnie rekord jest kierowany do odpowiedniego kubełka, określanego w dokumentacji jako bucket. Podczas wyszukiwania SQL Server wykonuje tę samą operację skrótu dla wartości podanej w predykacie i przechodzi bezpośrednio do właściwego obszaru indeksu. Największą korzyść uzyskuje się przy zapytaniach wyszukujących dokładną wartość klucza, na przykład przy warunku Bucket count, kolizje i rozkład kluczyPodczas definiowania Hash Index w SQL Server trzeba określić parametr Warto pamiętać, że SQL Server zaokrągla określony Kolizja nie oznacza utraty danych ani błędu integralności. Występuje wtedy, gdy różne wartości klucza otrzymają ten sam wynik funkcji skrótu. SQL Server przechowuje wówczas odpowiednie wpisy w tym samym kubełku i porównuje wartości kluczy, aby znaleźć właściwy rekord. Niewielka liczba kolizji jest normalna, ale długie łańcuchy kolizji mogą zmniejszyć przewagę indeksu nad innymi strukturami. Dlatego sam fakt istnienia Hash Index nie gwarantuje szybkiego wykonania każdego zapytania. Dobór indeksu do predykatu zapytaniaHash Index powinien odpowiadać rzeczywistemu sposobowi wyszukiwania danych. Jeżeli tabela jest często odczytywana według pełnego klucza złożonego, indeks powinien obejmować kolumny używane razem w warunku równości. Pominięcie części klucza może sprawić, że SQL Server nie wykorzysta indeksu w oczekiwany sposób albo będzie musiał sprawdzić większą liczbę wpisów. Przy kluczu złożonym znaczenie ma również zgodność predykatu z kolumnami zdefiniowanymi w indeksie. Hash Index nie zastępuje automatycznie wszystkich innych indeksów tabeli In-Memory. Jedna tabela może potrzebować różnych struktur dla różnych wzorców dostępu: jednej do wyszukiwania dokładnego identyfikatora, a innej do zapytań zakresowych lub operacji wymagających porządku wartości. Przy analizie planu wykonania należy sprawdzić, czy predykat rzeczywiście odpowiada indeksowi hashującemu oraz czy filtr nie zawiera dodatkowych warunków, które ograniczają jego użyteczność. W praktyce ocenia się między innymi liczbę pustych kubełków, długość łańcuchów kolizji, kardynalność klucza oraz rozmiar tabeli. Liczba różnych wartości jest ważniejsza niż sama liczba wierszy, ponieważ powtarzające się klucze mogą skupiać wiele rekordów w tych samych miejscach. Należy także uwzględnić aktualizacje i usuwanie danych. Zmiana wartości kolumny klucza oznacza zmianę położenia wpisu w strukturze skrótu, a operacje te są obsługiwane przez mechanizm indeksu razem z utrzymaniem wersji rekordów używanych przez In-Memory OLTP. Diagnostyka problemów z indeksem hashującymDiagnostyka Hash Index rozpoczyna się od potwierdzenia, że obiekt jest tabelą zoptymalizowaną pod kątem pamięci i że indeks został utworzony dla właściwych kolumn. Następnie należy porównać definicję indeksu z zapytaniami wykonywanymi przez aplikację. Szczególną uwagę zwraca się na zapytania równościowe, zakresowe, złożone warunki filtrujące oraz sytuacje, w których wartość klucza ma bardzo niską selektywność. Indeks na kolumnie przyjmującej niewiele różnych wartości może tworzyć długie łańcuchy wpisów w kubełkach. Przyczyną wolnego działania nie musi być uszkodzenie indeksu. Problemem może być niedopasowany Hash Index należy analizować jako element konkretnego modelu dostępu do tabeli In-Memory, a nie jako uniwersalne przyspieszenie dla wszystkich operacji. W środowisku wykorzystującym SQL Server sprawdzenie jego działania wymaga odniesienia do wersji silnika, konfiguracji tabeli zoptymalizowanej pod kątem pamięci oraz rzeczywistych planów zapytań. Przy problemach z dostępem do danych diagnostyka powinna obejmować również inne elementy serwera i aplikacji, ponieważ opóźnienie może powstawać poza samą strukturą indeksu. |