这是读书笔记,Mysql,innodb系列一共3篇。
CREATE TABLE `aid_***_detail` (
//省略所有字段
PRIMARY KEY (`id`),
KEY `range_idx` (`range_id`,`is_delete`,`range_detail_num`,`goods_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4复制代码
其中的Key和PRIMARY就是 B+树索引, 即常用的索引,大概率是B+树索引
注:关于锁的部分见下一篇blog:Mysql-innodb-锁复制代码
CREATE TABLE `aid_test` (
`id` varchar(32) NOT NULL COMMENT '主键',
`a` varchar(32) NOT NULL,
`b` varchar(32) NOT NULL,
`c` int(11) NOT NULL,
`is_delete` int(11) NOT NULL COMMENT '0未删除1已删除',
`create_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '创建时间',
`update_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
KEY `range_idx` (`a`,`b`,`c`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ;复制代码
叶子节点是否已经满了 | 索引节点是否已经满了 | 操作 |
否 | 否 | 记录直接插入到叶子节点 |
是 | 否 |
拆分叶子节点
叶子节点的中间值上升到索引节点
小于中间值的,放在新的左叶
大于等于中间值的,放在右叶
|
是 | 是 |
拆分叶子节点
叶子节点的中间值上升到索引节点
小于中间值的,放在新的左叶
大于等于中间值的,放在右叶
拆分索引节点
索引节点的中间值上升到上层索引节点
小于中间值的,放到左边索引节点
大于中间值的,放到右边新索引节点
|
叶子节点小于填充因子 | 索引节点小于填充因子 | 操作 |
否 | 否 |
直接删除,
如果该节点,还在索引节点中,用该节点的右节点替代
|
是 | 否 | 合并叶子节点,同时更新索引节点 |
是 | 是 |
合并叶子节点,
合并索引节点和它的兄弟节点
|