Po pierwsze, powinienem zaznaczyć, że nie mam zbyt dużej wiedzy na temat indeksów SQL Server.Czy indeksowanie poprawi wydajność zapytań varchar (max) i jak utworzyć indeks
Moja sytuacja jest taka, że mam tabelę bazy danych SQL Server 2008, która ma kolumnę varchar (max) zwykle wypełnioną lotem tekstu.
Moja aplikacja internetowa ASP.NET ma funkcję wyszukiwania, która zapytuje tę kolumnę o wyszukiwania słów kluczowych, i w zależności od liczby wyszukiwanych słów kluczowych może być jedną lub wieloma instrukcjami LIKE "% keyword%" w zapytaniu SQL aby przeprowadzić wyszukiwanie.
Moja aplikacja internetowa umożliwia również wyszukiwanie według różnych kolumn w tej tabeli, a nie tylko w jednej kolumnie. Istnieje również kilka sprzężeń z innych tabel.
Moje pytanie brzmi, czy warto utworzyć indeks w tej kolumnie, aby poprawić wydajność tych zapytań? A jeśli tak, jaki rodzaj indeksu wystarczy i wystarczy indeksowanie jednej kolumny lub czy muszę uwzględnić inne kolumny, takie jak klucz podstawowy i inne kolumny z możliwością wyszukiwania?
Diego, rozumiem, że mogę indeksować kolumnę varchar (max) tak długo, jak długo jest nieklastrowym indeksem offline, a kolumna var (max) zawiera wartość INCLUDE, np. UTWÓRZ NIEKLUBOWANY INDEKS IndexName ON TableName (SomeColumn) INCLUDE (VarcharMaxColumn) WITH (ONLINE = OFF) – johna
varchar (max) może być tylko uwzględniony w indeksie, oznacza to, że tylko poziomy liści będą uczestniczyć w indeksie, co oznacza, że prawie nie będą używane w zapytaniu wyszukiwania. – Diego
Z (ONLINE = OFF) nie jest własnością indeksu. Wskazuje, że indeks zostanie ustawiony w trybie offline podczas tworzenia. Jeśli ustawisz go na ON, indeks zostanie utworzony w tempDB, a tabela będzie dostępna podczas procesu tworzenia indeksu. Powinien być używany w przypadku dużych tabel, w których tworzenie indeksu zajmuje dużo czasu, a tabela nie może być niedostępna podczas tworzenia – Diego