分库分表索引设计:二级索引、全局索引的最佳设计实践 DATE: 2024-05-06 10:03:45
主键选择
对主键来说 ,分库分表要保证在所有分片中都唯一,索引设计设计实践它本质上就是索局索一个全局唯一的索引。如果用大部分同学喜欢的引全引自增作为主键 ,就会发现存在很大的最佳问题 。
因为自增并不能在插入前就获得值,分库分表而是索引设计设计实践要通过填 NULL 值,然后再通过函数 last_insert_id()获得自增的索局索值 。所以,引全引如果在每个分片上通过自增去实现主键 ,最佳可能会出现同样的分库分表自增值存在于不同的分片上 。
比如 ,索引设计设计实践对于电商的索局索订单表 orders ,其表结构如下(分片键是引全引o_custkey ,表的最佳主键是o_orderkey):
CREATE TABLE `orders` (n `O_ORDERKEY` int NOT NULL auto_increment,n `O_CUSTKEY` int NOT NULL,n `O_ORDERSTATUS` char(1) NOT NULL,n `O_TOTALPRICE` decimal(15,2) NOT NULL,n `O_ORDERDATE` date NOT NULL,n `O_ORDERPRIORITY` char(15) NOT NULL,n `O_CLERK` char(15) NOT NULL,n `O_SHIPPRIORITY` int NOT NULL,n `O_COMMENT` varchar(79) NOT NULL,n PRIMARY KEY (`O_ORDERKEY`),n KEY (`O_CUSTKEY`)n ......n) ENGINE=InnoDBn
如果把 o_orderkey 设计成上图所示的自增,那么很可能 o_orderkey 同为 1 的记录在不同的分片出现 ,如下图所示: