W rzeczywistości jest to trudniejsze niż się wydaje - typowy nowoczesny DBMS (a MS SQL Server nie jest wyjątkiem) czasami wykonuje pełne skanowanie tabeli, nawet jeśli indeks jest dostępny, po prostu dlatego, że może to być szybsze na małych ilościach danych.
Przykład:
-
Ostatnia instrukcja w tym przykładzie SQL Fiddle może być zaspokojony przez indeks, ale plan zapytania wyraźnie wskazywał na skan tabeli:
-
Ale jeśli wstawimy jakieś dane , indeks jest używany:
Co więcej, na decyzję podejmowaną przez DBMS może mieć wpływ to, jak świeże/dokładne statystyki są.
Najbardziej wiarygodnym testem na to, czy indeks jest używany, jest po prostu wypełnienie bazy danych reprezentatywnymi ilościami danych i następnie spójrz na plan wykonania . I nie zapomnij zmierzyć czasu rzeczywistego wykonania zapytania, kiedy już to robisz!
Uproszczony przykład:jeśli cała tabela mieści się na jednej stronie bazy danych, szybciej jest po prostu załadować tę stronę i przejść przez nią sekwencyjnie, niż czekać na dodatkowe I/O dla strony zawierającej indeks.