sql - 什么是索引列的 key_ordinal = 0

标签 sql sql-server indexing

在 MSSQL 中,我在分区表上有索引,对此我不理解属性 key_ordinal 为零时的含义。

要创建索引,分区方案基于 CUT_OFF。

create table dbo.TESTTB (CUT_OFF datetime, number int) on partscheme(CUT_OFF);
create index TESTIX on dbo.TESTTB (number) on partscheme(CUT_OFF);

查询显示key_ordinal的值:

select c.name as column_name, b.key_ordinal
from sys.indexes a
inner join sys.index_columns b 
    on  a.object_id = b.object_id and  a.index_id = b.index_id
inner join sys.all_columns c on b.object_id = c.object_id
    and b.column_id = c.column_id 
where a.name = 'TESTIX'

结果是:

column_name key_ordinal
CUT_OFF     0
number      1

CUT_OFF:

  • 显示在 sys.index_columns 中,key_ordinal = 0
  • Create Index 语句中缺少
  • sp_help 'TESTTB' 中的索引信息缺失

MSDN says:

0 = Not a key column, or is an XML index, a columnstore index, or a spatial index.

这是什么意思? 什么是 key_ordinal = 0

谢谢

最佳答案

看起来它被隐式添加到叶级别的索引(如 INCLUDE 列)。因此,它不是关键列。下面是该索引的 DBCC PAGE 输出的屏幕截图。

根级别:

enter image description here

叶级:

enter image description here

关于sql - 什么是索引列的 key_ordinal = 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37882445/

相关文章:

sql - 如果数据库总是进入 RECOVERY,这意味着什么?

sql - 为什么 SQL INSERT 和 UPDATE 语句有不同的语法?

mysql - 如何在 MySQL 中存储键值对?

sql - 仅选择 Varchar 列中的数字

sql-server - SQL EncryptByKey 不适用于插入,适用于更新

MySQL外键使用id还是value?

java - 以 Int 作为第一个参数、以 String 作为第二个参数的列表 (Java)

python - 使用 sqlalchemy 列出索引

MySQL:查找过去或 future 最近的日期

sql - 不满足多个条件之一时返回行