index_id < 256000 有什么意义?

usr*_*usr 11 index sql-server metadata catalog-views

在我读到的某个教程中,作者正在sys.indexes根据谓词进行过滤index_id < 256000。这有什么作用?

Aar*_*and 17

这是基于这样一种误解,即 XML 索引是目前唯一可以具有 >= 256000 的 id 方案的类型(至少根据他们的观察;该方案没有记录在 AFAIK 中,因此甚至不确定它是否是故意的)。在当前版本中可能没问题,但谁知道接下来会添加什么类型的索引以及它的 id 方案将从哪里开始?如果您想排除 XML 索引,您现在还要排除其他内容。例如,空间索引似乎从 id = 384000 开始。如果上面的查询打算包含空间索引但不包含 XML 索引,那么它们将会大吃一惊。

一个更好的过滤器是:

WHERE type <> 3;
Run Code Online (Sandbox Code Playgroud)

......甚至更好,因为它是自我记录的......

WHERE type_desc <> N'XML';
Run Code Online (Sandbox Code Playgroud)

现在,当您还想排除空间索引时,您的查询将更改为...

WHERE type_desc NOT IN (N'XML', N'SPATIAL');
Run Code Online (Sandbox Code Playgroud)

...而不必弄清楚空间索引的 id 值可能占用(或不占用)的数字范围。祝你好运。

这些在sys.indexes (Transact-SQL) 中有非常清楚的记录。我没有看到这个神奇数字的参考,我强烈建议你将你的教程作者指向这里,这样他们就可以看到这个神奇数字不是他们应该依赖的东西(更不用说教别人依赖了)。

  • +1 这是一个可怕的坏习惯。忘记`index_id`。特别是因为用于确定类型的更准确的数据就在它旁边......字面意思。 (4认同)