2016-11-08 35 views
7

Proszę wyjaśnić różnicę między skanowaniem indeksu a wyszukiwaniem indeksu na serwerze MS SQL z przykładowym przykładem, ponieważ będzie pomocne dowiedzieć się, jakie jest jego rzeczywiste wykorzystanie. Z góry dziękuję.Indeks Wyszukiwanie i skanowanie indeksu w SQL Server

+3

Możliwa duplikatu [Plany serwera SQL: różnica między wyszukiwaniem indeksu/wyszukiwaniem indeksu] (http://stackoverflow.com/questions/1136524/sql-server-plans-difference-between-inde x-scan-index-seek) – damienc

Odpowiedz

11

Oto SHOWPLAN tekst (lekko edytowane za zwięzłość) dla tego zapytania przy użyciu skanowania:

|–Table Scan(OBJECT:([ORDERS]), WHERE:([ORDERKEY]=(2))) 

Poniższy rysunek ilustruje skanowania:

enter image description here

Oto SHOWPLAN tekst dla tego samego zapytania przy użyciu wyszukiwania:

|–Index Seek(OBJECT:([ORDERS].[OKEY_IDX]), SEEK:([ORDERKEY]=(2)) ORDERED FORWARD) 

enter image description here

rzucić okiem na ten SQL Server Plans : difference between Index Scan/Index Seek

+0

Wygląda więc na to, że poszukiwacz faktycznie przechowuje zapisy w jakiejś kolejności. Hense dlaczego wie dokładnie, gdzie te wartości są w tabeli? Czy fizycznie przechowuje się je w ten sposób, czy też mają jakiś wskaźnik do miejsca, w którym zapis jest fizycznie przechowywany? – SnellyCat

3

w prostych słowach, skanowania indeksu lub skanowanie tabeli jest, gdy SQL Server ma do skanowania danych lub strony indeksu, aby znaleźć odpowiednie zapisy. Skan jest przeciwieństwem przeszukiwania, gdzie przeszukiwanie wykorzystuje indeks do wskazania rekordów, które są potrzebne do spełnienia zapytania.

Twoje pytanie jest podobne do pytania, które jest już pisał w stackoverflow dostać go z poniższego linku

#Index scan vs Index seek

można również uzyskać informacje z poniższego linku

#Index scan vs Index seek in brief