Mysql数据库InnoDB及索引相关学习记录
Mysql 存储引擎:InnoDB,MyISAM 等
InnoDB架构:
In-Memory Structure(内存结构) 在MySQL 服务进程内 包括:Adaptive Hash Index(自适应哈希索引),Log buffer(日志缓冲),change buffer(写缓冲),Buffer Pool(缓冲池)
OS cache OS缓存 属于内核态内存
On-Disk Sructure(磁盘结构)在文件系统上。主要包括 日志与表空间
InnoDB中,主键索引是聚集索引, 其他索引是普通索引,普通索引记录的值是 主键。
自适应哈希索引 AHI 系统为了加速自己判断使用哈希索引,像是 “索引的索引”。当然有时候也会误判。可以手动关闭API功能
对应很多单行记录查询,范围查询 , AHI往往是很有效的。
Mysql索引类型有 哈希和B+树,一般来说,哈希索引如 HashMap的 时间复杂度是 O(1) ,二叉树的时间复杂度是 : O(log(n)),对于排序查询,group by,order by,比较等,哈希索引的时间复杂度会退化为 O(n) 。
InnoDB并不能手动设置Hash索引。
数据结构
B树是为了解决数据库搜索而被发明的。
B树特点:
1、与二叉树相比,是 m叉树
2、非叶子节点也存储数据
3、中序遍历可以获得所有节点
ps:树的遍历方式,以下图二叉树为例, 前序遍历:左中右 (CBDAFEG), 中序遍历:中左右 (ABCDEFG),后序遍历:右中左 (GEFADBC)。
B+树 是B树的改进版本
1、非叶子节点不在存储数据
2、叶子节点之间增加了链表
相对于B树优势: 1、范围查找,叶子节点存储记录适用于大数据量磁盘存储。 2、非叶子节点存储,用于查询加速,适合内存存储。 3、相同情况下,B+树能存储更多索引