2010-07-03 13 views
15

Mam tabelę Użytkownik z wieloma indeksami. Jednym z nich jest unikalny indeks w kolumnie AccountIdentifier.Dlaczego to zapytanie sql wykonuje wyszukiwanie klucza?

Ponieważ jest to unikalny indeks, dlaczego oprócz wyszukiwania indeksu wymagane jest wyszukiwanie klucza? Indeksy wywołują raporty podpowiedzi, że zwracany jest tylko jeden rekord. Próbowałem również przekonwertować indeks na typ "unikalny klucz".

alt text http://s3.amazonaws.com/brandonc.baconfile.com/pitchurs/tmp/capture_2.png

+2

Na marginesie: nigdy nie wykonuj "SELECT *" w systemie produkcyjnym - ** NIGDY ** - bez wyjątków. To jest zła praktyka na początek .... –

Odpowiedz

17

Bo to jest wybór *.

Używa indeksu nieklastrowego, aby zlokalizować wiersz (y), ale następnie musi iść i pobrać dane, aby powrócić.

Aby uniknąć bookmark lookup trzeba by zrobić non indeksu klastrowego indeksu motywacyjny (najlepiej poprzez ograniczenie liczby kolumn na liście select, ale możliwe również poprzez dodanie nowych kolumn w taki lub jako included columns index)

Jeśli indeks klastrowany znajduje się w tabeli, lokalizator wiersza w indeksie nieklastrowanym będzie zawierał klastrowany klucz indeksu, więc nie będzie potrzebował wyszukiwania zakładek w celu spełnienia zapytań tylko w kolumnach indeksu AccountIdentifier i klastrowych.

+1

Zrobiłem trochę eksperymentowania. Tak więc wydaje się, że wybierając wszystko, czego nie ma w indeksie, wyniki wyszukiwania klucza. To ma sens. –

+1

@BC - Zasadniczo tak, ale jeśli masz indeks klastrowany, możesz uważać, że te kolumny mają być uwzględniane automatycznie. –

13

Wyszukiwanie kluczy nie oznacza "szukania klucza", ale "wyszukiwanie wiersza na podstawie klucza".

Powiązane problemy