OceanBase 会用非空唯一索引作为主键吗?

版本:OB 3.2.x Oracle租户,4.2.x MySQL租户。
众所周知,Oracle是堆表,通过ROWID唯一标识一行数据,数据段按写入顺序进行存储。主键索引与唯一索引的重点是约束,索引是B+树结构。MySQL是索引组织表,数据与索引均为B+树结构,当表未设置主键时,若有非空唯一索引,会选择它作为隐式主键。
而OB同MySQL一样是索引组织表,在没有定义主键时行为如何?我在官网搜到的资料,仍会创建分区级自增列,为什么没有选择非空唯一索引作为隐式主键呢?
–另外官网有错误,分区表主键索引只允许创建含分区键的本地索引。官网太很偏爱全局索引了。
主键表和无主键表 -OceanBase 数据库 -OceanBase文档中心-分布式数据库使用文档

  1. 不会。 如果没有指定主键,OB 会生成内部自增列作为主键(名字:__pk_increment )。
  2. 自增列是数值型,业务定义的非空索引类型很随意。显然前者在存储和使用上效率更好。
  3. 索引组织表,数据就是主键。分区表也不例外。所以分区表的主键要带上分区键。但是分区表的唯一索引(约束)就可以带上分区键(local索引)也可以不带上分区键(global索引)。
2 个赞

谢谢您的解答。

第3点也是对文档描述有误解,文档称:“会自动为主键列创建一个全局唯一索引”,其实它不是global索引,应该理解为:创建一个全局唯一的本地索引。

“在创建有主键表后,会自动为主键列创建一个全局唯一索引,可以通过主键快速定位到行。”
–官网文档是不是也更新下描述呢?

1 个赞