欢迎来到Introzo百科
Introzo百科
当前位置:网站首页 > 技术 > 分库分表后索引如何设计?在全局索引和二级索引

分库分表后索引如何设计?在全局索引和二级索引

日期:2023-10-07 21:37

分布式数据库架构下,索引的设计也需要调整,否则无法充分发挥分布式架构 线性 扩展优势。今天我们来聊聊“分布式数据库架构中如何正确设计索引?”

主键选择

对于主键来说,它在所有分片中必须是唯一的。它本质上是一个全球唯一索引。如果用大多数同学喜欢的自增方式作为主键,你会发现存在很大的问题。

因为自增无法获取插入前的值,所以必须先填充NULL值,然后通过函数last_insert_id()获取自增值。因此,如果主键在每个分片上都采用自增的方式实现,则不同分片上可能存在相同的自增值。

以电商订单表orders为例,表结构如下(分片键为o_custkey,表主键为o_orderkey):

创建  `订单` (
  `O_ORDERKEY`  int 不是 NULL 自动增量,
  `O_CUSTKEY` int NOT NULL,
  ` O_ORDERSTATUS` char(1NOT NULL,
  `O_TOTALPRICE` 十进制(15,2NOT NULL,
  `O_ORDERDATE` 日期 不是 NULL,
  `O_ORDERPRIORITY` char(15)NOT NULL,
  `O_CLERK` char(15NOT NULL,
  `O_SHIPPRIORITY` int NOT NULL,
  `O_COMMENT` varchar(79)NOT NULL,
  主KEY`O_ORDERKEY`),   KEY`O_CUSTKEY` )
  ......
引擎=InnoDB

如果把o_orderkey设计成上图所示的自增,那么很可能o_orderkey 同为1个记录在不同的分片中出现,如下图所示:

关灯