Sql-Server

index_id < 256000 有什麼意義?

  • May 6, 2019

在我閱讀的某個教程中,作者是sys.indexes基於謂詞進行過濾index_id &lt; 256000。這有什麼作用?

這是基於這樣一種誤解,即 XML 索引是目前唯一可能具有 >= 256000 的 id 方案的類型(至少基於他們的觀察;該方案沒有記錄在 AFAIK 中,因此甚至不確定它是否是故意的)。在目前版本中可能很好,但是誰知道接下來會添加什麼類型的索引以及它的 id 方案將從哪裡開始呢?如果您想排除 XML 索引,您現在也排除了其他內容。例如,空間索引似乎從 id = 384000 開始。如果上面的查詢打算包括空間索引而不是 XML 索引,那麼它們將會大吃一驚。

更好的過濾器是:

WHERE type &lt;&gt; 3;

…甚至更好,因為它是自我記錄的…

WHERE type_desc &lt;&gt; N'XML';

現在,當您還想排除空間索引時,您的查詢將更改為…

WHERE type_desc NOT IN (N'XML', N'SPATIAL');

…而不必弄清楚空間索引的 id 值可能佔用(或不佔用)的數字範圍。祝你好運。

這些在sys.indexes (Transact-SQL)中有非常清楚的記錄。我沒有看到對這個幻數的引用,我強烈建議您在此處指出您的教程作者,這樣他們就可以看到這個幻數不是他們應該依賴的東西(更不用說教別人依賴了)。

引用自:https://dba.stackexchange.com/questions/84236