Znam podstawowe różnice między indeksami klastrowymi i nieklastrowymi i rozumiem, jak faktycznie działają. Rozumiem, jak indeksy klastrowe i nieklastrowe poprawiają wydajność odczytu. Ale nie jestem pewien, jakie byłyby powody, dla których wybrałbym jedną z nich.
Na przykład: jeśli tabela nie ma indeksu klastrowego, czy należy utworzyć indeks nieklastrowy i jakie są korzyści z tego
Odpowiedzi:
Chcę tylko dodać słowo ostrzeżenia: proszę bardzo ostrożnie wybrać indeks klastrowy! Każda „zwykła” tabela danych powinna mieć indeks klastrowy, ponieważ posiadanie indeksu klastrowego rzeczywiście przyspiesza wiele operacji - tak, przyspiesz , a nawet wstawia i usuwa! Ale tylko wtedy, gdy wybierzesz dobry indeks klastrowy.
Jest to najbardziej replikowana struktura danych w bazie danych SQL Server. Klucz klastrowy będzie również częścią każdego indeksu nieklastrowego w tabeli.
Należy zachować szczególną ostrożność podczas wybierania klucza klastrowego - powinien to być:
wąskie (idealne 4 bajty)
unikalny (w końcu to „wskaźnik wiersza”. Jeśli nie uczynisz go unikatowym, SQL Server zrobi to za Ciebie w tle, kosztując kilka bajtów za każdy wpis pomnożony przez liczbę wierszy i liczbę indeksów nieklastrowych masz - to może być bardzo kosztowne!)
statyczny (nigdy nie zmieniaj - jeśli to możliwe)
idealnie stale rosnący, więc nie skończy się z okropną fragmentacją indeksu (identyfikator GUID jest całkowitym przeciwieństwem dobrego klucza klastrowego - z tego konkretnego powodu)
powinien być bez wartości null, a najlepiej również o stałej szerokości - a
varchar(250)
jest bardzo słabym kluczem do grupowaniaWszystko inne powinno być naprawdę drugim i trzecim poziomem ważności za tymi punktami ...
Zobacz niektóre posty Kimberly Tripp ( Królowej indeksowania ) na ten temat - wszystko, co napisała na swoim blogu, jest absolutnie bezcenne - przeczytaj to, przetraw - żyj zgodnie z tym!
źródło
non clustered
dla nas indeks. jakie jest jego znaczenie ..?