Zgadzam się z Cade Roux .
Ten artykuł powinien doprowadzić Cię na właściwą drogę:
Należy zauważyć, że indeksy klastrowe powinny mieć unikalny klucz (kolumnę tożsamości polecam) jako pierwszą kolumnę. Zasadniczo pomaga wstawiać dane na końcu indeksu i nie powoduje wielu dyskowych operacji we / wy i podziału strony.
Po drugie, jeśli tworzysz inne indeksy na swoich danych, które są sprytnie skonstruowane, zostaną ponownie wykorzystane.
np. wyobraź sobie, że przeszukujesz tabelę w trzech kolumnach
stan, hrabstwo, zip.
- czasami wyszukujesz tylko według stanu.
- czasami wyszukujesz według stanu i hrabstwa.
- często wyszukujesz według stanu, hrabstwa, zip.
Następnie indeks ze stanem, hrabstwem, zip. będą używane we wszystkich tych trzech wyszukiwaniach.
Jeśli dość często przeszukujesz sam zip, powyższy indeks nie zostanie użyty (w każdym razie SQL Server), ponieważ zip jest trzecią częścią tego indeksu, a optymalizator zapytań nie uzna tego indeksu za pomocny.
Następnie możesz utworzyć indeks samego Zip, który byłby używany w tym przypadku.
Nawiasem mówiąc, możemy skorzystać z faktu, że przy indeksowaniu wielokolumnowym pierwsza kolumna indeksu jest zawsze przydatna do wyszukiwania, a gdy wyszukujesz tylko według „stanu”, jest to wydajne, ale nie tak skuteczne jak indeks jednokolumnowy dla „stanu” „
Wydaje mi się, że odpowiedź, której szukasz, polega na tym, że zależy to od tego, gdzie znajdują się klauzule często używanych zapytań, a także od twojej grupy.
Artykuł bardzo pomoże. :-)
IDENTITY, GUID, etc
. 3) „Następnie we wszystkich trzech wyszukiwaniach zostanie użyty indeks ze stanem, hrabstwem i zip.” jest fałszywe i jest sprzeczne z „pierwszą kolumną nadającą się do użytku”. Kolumny 2nd i sub w indeksie nie nadają się do wyszukiwania.Tak. Polecam przejrzenie artykułów Kimberly Tripp na temat indeksowania .
Jeśli indeks „obejmuje”, nie ma potrzeby używania niczego poza indeksem. W SQL Server 2005 można również dodawać do indeksu dodatkowe kolumny, które nie są częścią klucza, co może wyeliminować przejazdy do pozostałej części wiersza.
Mając wiele indeksów, każdy w jednej kolumnie może oznaczać, że w ogóle używany jest tylko jeden indeks - będziesz musiał zapoznać się z planem wykonania, aby zobaczyć, jakie efekty oferują różne schematy indeksowania.
Możesz także użyć kreatora strojenia, aby ustalić, które indeksy spowodowałyby, że dane zapytanie lub obciążenie działałoby najlepiej.
źródło
Indeks wielokolumnowy może być używany do zapytań odnoszących się do wszystkich kolumn:
Można to sprawdzić bezpośrednio za pomocą indeksu wielokolumnowego. Z drugiej strony można użyć maksymalnie jednego indeksu jednokolumnowego (musiałby wyszukać wszystkie rekordy mające Kolumnę1 = 1, a następnie zaznaczyć Kolumnę2 i Kolumnę3 w każdym z nich).
źródło
Jednym z elementów, który wydaje się być pominięty, są transformacje gwiazd. Operatory przecięcia indeksu rozwiązują predykat, obliczając zbiór wierszy trafionych przez każdy z predykatów, zanim jakiekolwiek operacje we / wy zostaną wykonane w tabeli faktów. W schemacie gwiaździstym indeksowałbyś każdy klucz wymiaru, a optymalizator zapytań może rozstrzygnąć, które wiersze wybrać na podstawie obliczeń przecięcia indeksu. Indeksy w poszczególnych kolumnach zapewniają najlepszą elastyczność.
źródło
Jeśli masz zapytania, które często będą używać względnie statycznego zestawu kolumn, utworzenie jednego indeksu obejmującego je wszystkie znacznie poprawi wydajność.
Po umieszczeniu wielu kolumn w indeksie optymalizator będzie musiał uzyskać bezpośredni dostęp do tabeli tylko wtedy, gdy kolumny nie ma w indeksie. Dużo ich używam w hurtowni danych. Minusem jest to, że robienie tego może kosztować dużo narzutu, szczególnie jeśli dane są bardzo niestabilne.
Tworzenie indeksów w pojedynczych kolumnach jest przydatne do operacji wyszukiwania często spotykanych w systemach OLTP.
Powinieneś zadać sobie pytanie, dlaczego indeksujesz kolumny i jak będą one używane. Uruchom niektóre plany zapytań i sprawdź, kiedy są dostępne. Strojenie indeksów jest tak samo instynktowne jak nauka.
źródło