W pewnym samouczku, który przeczytałem, autor filtruje sys.indexes
na podstawie predykatu index_id < 256000
. Co to osiąga?
11
W pewnym samouczku, który przeczytałem, autor filtruje sys.indexes
na podstawie predykatu index_id < 256000
. Co to osiąga?
sys.sysindexkeys
sys.selective_xml_index_paths
,sys.xml_indexes
,sys.sysindexes
ale przypuszczam, że to będzie tylko aktualizowane, jeśli liczba magia nie jest już ważny.Odpowiedzi:
Jest to oparte na błędnym przekonaniu, że indeksy XML są obecnie jedynym typem, który może mieć schemat identyfikatora, który wynosi> = 256000 (przynajmniej na podstawie ich obserwacji; ten schemat nie jest udokumentowany AFAIK, więc nie jestem pewien, czy jest celowy). Prawdopodobnie dobrze w obecnych wersjach, ale kto wie, jaki typ indeksu zostanie dodany następnie i gdzie rozpocznie się jego schemat identyfikacyjny? Jeśli chcesz wykluczyć indeksy XML, teraz wykluczasz także coś innego. Na przykład indeksy przestrzenne zaczynają się od id = 384000. Jeśli powyższe zapytanie ma obejmować indeksy przestrzenne, ale nie indeksy XML, czeka ich niespodzianka.
Znacznie lepszym filtrem byłoby:
... lub nawet lepiej, ponieważ jest to samo-dokumentowanie ...
A teraz, gdy chcesz również wykluczyć, powiedzmy, indeksy przestrzenne, twoje zapytanie zmienia się na ...
... zamiast zastanawiać się, jaki zakres liczbowy mogą zajmować (lub nie) wartości id dla indeksów przestrzennych. Powodzenia z tym.
Są one dość wyraźnie udokumentowane w sys.indexes (Transact-SQL) . Nie widzę odniesienia do tej magicznej liczby i bardzo polecam wskazanie tutaj autora samouczka, aby mogli zobaczyć, że ta magiczna liczba nie jest czymś, na czym powinni polegać (nie wspominając o uczeniu innych, na czym można polegać).
źródło
index_id
. Zwłaszcza, że dokładniejsze dane do określania typu znajdują się tuż obok ... dosłownie.Według książki „Microsoft SQL Server 2012 Internals” Kalena Delaneya, Craiga Freemana, indeks_ideksu indeksu XML zaczyna numerować od 256000. Aby uzyskać wszystkie informacje o indeksach typów (kwerendy sys.indexes), pomijając indeksy XML, można umieścić taki filtr.
Ten sam zestaw wyników można uzyskać, umieszczając filtr na kolumnie typu sys.indexes. Dla typu indeksów typu XML = 3.
lub
Można także użyć kolumny type_desc.
źródło