Zgadzam się z Cade Roux.
Ten artykuł powinien skierować Cię na właściwą drogę:
- Indeksy w SQL Server 2005/2008 — najlepsze praktyki, część 1
- Indeksy w SQL Server 2005/2008 – Część 2 – Wewnętrzne
Należy zauważyć, że indeksy klastrowe powinny mieć unikalny klucz (polecam kolumnę tożsamości) jako pierwszą kolumnę. Zasadniczo pomaga to wstawić dane na końcu indeksu i nie powoduje wielu operacji we/wy dysku i podziałów stron.
Po drugie, jeśli tworzysz inne indeksy na swoich danych i są one sprytnie skonstruowane, zostaną ponownie użyte.
np. wyobraź sobie, że przeszukujesz tabelę w trzech kolumnach
stan, powiat, kod pocztowy.
- czasami wyszukujesz tylko według stanu.
- czasami wyszukujesz według stanu i hrabstwa.
- często wyszukujesz według stanu, hrabstwa, kodu pocztowego.
Następnie indeks ze stanem, hrabstwem, kodem pocztowym. zostaną użyte we wszystkich trzech z tych wyszukiwań.
Jeśli będziesz często wyszukiwać według samego zip, powyższy indeks nie będzie używany (w każdym razie przez 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 na samym Zip, który byłby używany w tym przypadku.
Przy okazji możemy skorzystaćz faktu,że przy indeksowaniu wielokolumnowym pierwsza kolumna indeksu jest zawsze użyteczna do wyszukiwania, a przy wyszukiwaniu tylko według „stanu” jest wydajna, ale nie tak wydajna jak indeks jednokolumnowy w „stanie” '
Wydaje mi się, że odpowiedź, której szukasz, jest taka, że zależy to od twoich klauzul gdzie często używanych zapytań, a także od twojej grupy według.
Artykuł bardzo pomoże. :-)