| Termin | Definicja |
|---|---|
| Range Index | Range Index to indeks przeznaczony do zapytań o zakres wartości, stosowany m.in. w tabelach memory-optimized. Range Index w tabeli memory-optimizedRange Index w SQL Server jest indeksem przeznaczonym do wyszukiwania rekordów według porządku wartości klucza. Ma znaczenie przede wszystkim w tabelach zoptymalizowanych pod kątem pamięci, czyli tabelach utworzonych z opcją W odróżnieniu od indeksu hash, Range Index nie ogranicza się do dokładnego dopasowania. Może wspierać predykaty takie jak Jak zakres wartości jest obsługiwany przez indeksPrzykładowa tabela memory-optimized może zawierać kolumnę Indeks zakresowy może być zdefiniowany jako indeks jedno- lub wielokolumnowy. W indeksie wielokolumnowym kolejność kolumn ma znaczenie: pierwsza kolumna klucza wyznacza główny porządek wyszukiwania, a następne doprecyzowują położenie rekordów dla jednakowych wartości wcześniejszych kolumn. Z tego powodu zapytanie wykorzystuje taki indeks najłatwiej wtedy, gdy filtruje lub porządkuje dane zgodnie z początkowym fragmentem klucza. Sam fakt istnienia indeksu nie gwarantuje jego użycia, ponieważ optymalizator bierze pod uwagę selektywność predykatu, koszt odczytu oraz pozostałą część planu wykonania. Range Index a indeks hash w In-Memory OLTPIndeks hash jest dostosowany do wyszukiwania dokładnej wartości klucza. Predykat równoważności może być dla niego właściwym zastosowaniem, natomiast zapytania o przedziały wymagają indeksu uporządkowanego. Indeks hash nie zapewnia naturalnego przejścia przez wartości od najmniejszej do największej, dlatego nie zastępuje Range Index przy filtrach czasowych, porównaniach liczbowych ani sortowaniu po kluczu. Przy projektowaniu tabeli memory-optimized należy dobrać indeks do rzeczywistych predykatów zapytań. Jeśli aplikacja często odczytuje rekordy dla konkretnego klucza, można rozważyć indeks hash. Jeśli natomiast pobiera zakres identyfikatorów, dat lub innych wartości uporządkowanych, odpowiedni jest indeks niehaszowany. Jeden indeks może wspierać więcej niż jeden rodzaj operacji, ale jego użyteczność zależy od kolejności kolumn, kierunku filtrowania i tego, czy zapytanie musi odczytać dodatkowe kolumny spoza klucza indeksu. Diagnostyka planu i praktyczne skutki błędnego wyboruOcena Range Index powinna obejmować rzeczywiste zapytania oraz ich plany wykonania. W SQL Server można sprawdzić, czy optymalizator wybrał dostęp przez indeks, czy zastosował skan tabeli albo inną metodę. Szczególnej uwagi wymagają warunki, w których kolumna indeksowana jest ukryta w funkcji, podlega niejawnemu rzutowaniu typu lub jest porównywana w sposób utrudniający rozpoznanie zakresu. W takich sytuacjach indeks może istnieć, lecz plan nie wykorzysta go w oczekiwany sposób. Nieprawidłowo dobrany indeks zakresowy może zwiększać koszt utrzymania tabeli podczas modyfikacji danych. Wstawianie, aktualizowanie i usuwanie rekordów musi uwzględniać struktury indeksów, dlatego nadmiar indeksów może pogorszyć wydajność operacji zapisu i zwiększyć zużycie pamięci. Podczas diagnostyki należy więc zestawić czas zapytań odczytujących zakresy z kosztem zapisów, sprawdzić definicję klucza oraz zweryfikować, czy plan wykonania odpowiada faktycznemu profilowi pracy aplikacji. Przy diagnostyce i naprawie laptopów oraz komputerów PC analiza takiej konfiguracji wymaga dostępu do konkretnej instancji SQL Server, definicji tabeli, zapytań i planów wykonania, ponieważ sam komunikat o obecności Range Index nie wskazuje jeszcze problemu ani jego przyczyny. |