В определенном уроке, который я прочитал, автор выполняет фильтрацию sys.indexes
на основе предиката index_id < 256000
. Что это делает?
11
В определенном уроке, который я прочитал, автор выполняет фильтрацию sys.indexes
на основе предиката index_id < 256000
. Что это делает?
sys.sysindexkeys
sys.selective_xml_index_paths
,sys.xml_indexes
,sys.sysindexes
но я полагаю , это не просто обновляется , если магическое число больше не действует.Ответы:
Это основано на неправильном представлении о том, что XML-индексы в настоящее время являются единственным типом, который может когда-либо иметь схему идентификатора, которая> = 256000 (по крайней мере, на основании их наблюдения; эта схема не документирована AFAIK, поэтому даже не уверен, является ли она преднамеренной). Вероятно, хорошо в текущих версиях, но кто знает, какой тип индекса будет добавлен дальше и где начнется его схема идентификации? Если вы хотите исключить XML-индексы, теперь вы также исключаете что-то еще. Например, кажется, что пространственные индексы начинаются с id = 384000. Если в приведенном выше запросе предполагается включить пространственные индексы, но не XML-индексы, их ждет сюрприз.
Гораздо лучший фильтр будет:
... или даже лучше, так как это самодокументируется ...
И теперь, когда вы хотите исключить, скажем, пространственные индексы, ваш запрос меняется на ...
... вместо того, чтобы выяснить, какой числовой диапазон могут занимать значения идентификаторов для пространственных индексов (или нет). Удачи с этим.
Они довольно четко задокументированы в sys.indexes (Transact-SQL) . Я не вижу ссылки на это магическое число, и я настоятельно рекомендую вам указать здесь вашего учебника, чтобы они могли видеть, что на это магическое число не следует полагаться (не говоря уже о том, чтобы научить других полагаться).
источник
index_id
. Тем более, что более точные данные для определения типа находятся прямо рядом с ним ... буквально.Согласно книге «Внутренние компоненты Microsoft SQL Server 2012» Калена Делани, Крейг Фриман, index_id индекса XML начинается с 256000. Таким образом, чтобы получить информацию обо всех индексах типов (запрашивая sys.indexes), но пропуская индексы XML, вы можете поместить фильтр таким образом.
Такой же набор результатов можно получить, поместив фильтр в столбец типа sys.indexes. Для типа XML индексов тип = 3.
или же
столбец type_desc также может быть использован.
источник