对于在分区表上创建索引,以下说法正确的是:

对于在分区表上创建索引,以下说法正确的是:

A. 局部索引是在表的每个分区上创建的索引,局部索引的索引键必须包含分区键

B. 不论是全局索引,还是局部索引,其索引键中都会包含主键

C. 全局索引是在表的所有分区上创建的索引,全局索引只能有一个分区

D. 当需要保证全局唯一时,必须创建全局索引

正确答案是:D. 当需要保证全局唯一时,必须创建全局索引,采纳我哦

解析:

  • A 错误 :局部索引(Local Index)确实是在表的每个分区上独立创建的索引,但其索引键并非必须 包含分区键。只有当需要在局部索引上强制实施唯一约束 (Unique Constraint)时,索引键才必须包含分区键。对于普通的非唯一局部索引,无需包含分区键19。
  • B 错误 :无论是全局索引还是局部索引,索引键中并不一定会包含主键。只有当表的主键或唯一约束需要跨越分区生效时,索引键才需要包含分区键或主键列。普通的索引完全可以建立在非主键、非分区键的列上28。
  • C 错误 :全局索引(Global Index)是跨越整个分区表创建的单一索引结构,它不依赖于表的物理分区。但全局索引本身也可以被分区 (例如全局分区索引 Global Partitioned Index),其分区方式可以与表的分区方式不同,并非只能有一个分区713。
  • D 正确 :在分区表中,默认的局部索引只能保证“分区内唯一”。如果业务需要保证整个表范围内的数据全局唯一(例如订单号、身份证号等),且该唯一键不包含分区键,则必须 创建全局索引(Global Index)来实现全局唯一约束
1 个赞

正确答案是 B、D

详细解析:

  • :x: 选项 A (局部索引是在表的每个分区上创建的索引,局部索引的索引键必须包含分区键) 错误
    前半句是正确的,局部索引确实是在表的每个分区上创建的独立索引。但后半句“必须包含分区键”是错误的。局部索引的索引键不需要包含分区键,只有在创建局部唯一索引 (Local Unique Index)时,为了保证唯一性约束在分区级别生效,分区键才必须包含在索引键中13。对于普通的局部索引,索引键可以是表中的任意列。
  • :white_check_mark: 选项 B (不论是全局索引,还是局部索引,其索引键中都会包含主键) 正确
    在绝大多数关系型数据库(如 Oracle、OceanBase、MySQL 等)中,索引的底层结构(如 B+ 树)的叶子节点除了存储索引列的值外,还需要存储对应数据行的物理地址或主键值(RowID/主键),以便在通过索引定位到数据后,能够回表查询到该行的完整数据。因此,无论是全局索引还是局部索引,其索引键(内部存储结构)中都会包含主键信息。
  • :x: 选项 C (全局索引是在表的所有分区上创建的索引,全局索引只能有一个分区) 错误
    全局索引确实跨越了表的所有分区,但这并不意味着它只能有一个分区。全局索引分为“全局非分区索引”和“全局分区索引”。全局分区索引本身也是分区的(例如可以按哈希或范围进行分区),只是它的分区方式独立于基础表的分区方式23。
  • :white_check_mark: 选项 D (当需要保证全局唯一时,必须创建全局索引) 正确
    局部索引的唯一性约束仅在单个分区内部有效,无法跨分区保证数据的唯一性。如果业务需求要求某个字段(或字段组合)在整个分区表中保持全局唯一(例如全局主键或全局唯一业务单号),则必须创建全局索引(或全局非分区索引)来实现跨分区的唯一性约束45。
1 个赞

选择A