Answers:
这是基于这样一种误解,即XML索引是当前唯一可以具有大于等于256000的id方案的类型(至少基于它们的观察;该方案未记录在AFAIK中,因此甚至不确定是否是故意的)。在当前版本中可能还不错,但是谁知道接下来将添加哪种类型的索引以及其ID方案将从何处开始?如果要排除XML索引,现在也要排除其他内容。例如,空间索引似乎始于id =384000。如果上面的查询打算包含空间索引但不包含XML索引,那么它们将是一个惊喜。
更好的过滤器是:
WHERE type <> 3;
甚至更好,因为它是自我记录的...
WHERE type_desc <> N'XML';
现在,当您还想排除空间索引时,您的查询将更改为...
WHERE type_desc NOT IN (N'XML', N'SPATIAL');
...而不必弄清楚空间索引的id值可能占用(或不占用)哪个数值范围。祝你好运。
sys.indexes(Transact-SQL)中清楚地记录了这些内容。我看不到这个幻数,我强烈建议您在这里指点教程作者,这样他们可以看到这个幻数不是他们应依靠的(不要介意教别人依赖)。
index_id
。尤其是因为更准确的数据用于确定类型就在它旁边...从字面上看。
根据《 Microsoft SQL Server 2012 Internals》一书,由Craig Freeman的Kalen Delaney撰写,XML索引的index_id从256000开始编号。因此,要获取所有类型索引信息(查询sys.indexes),但是跳过XML索引,您可以像这样放置过滤器。
SELECT * FROM sys.indexes WHERE index_id <256000
通过将过滤器放在sys.indexes的type列上,可以获得相同的结果集。对于XML类型的索引,类型= 3。
SELECT * FROM sys.indexes WHERE type <> 3
要么
也可以使用type_desc列。
SELECT * FROM sys.indexes WHERE type_desc <> 'XML'
sys.sysindexkeys