一、存储引擎
1、MySQL体系结构
2、存储引擎简介
存储引擎就是存储数据、建立索引、更新/查询数据等技术的实现方式。存储引擎是基于表的,而不是基于库的所以存储引擎也可被称为表类型。
3、存储引擎特点
- InnoDB
- MyISAM
- Memory
三个存储引擎之间的区别:
4、存储引擎选择
二、索引
1、索引概述
索引(index)是帮助MySQL高效获取数据的数据结构(有序)。在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构上实现高级查找算法,这种数据结构就是索引。
2、索引结构
MySQL的索引是在存储引擎层实现的,不同的存储引擎有不同的结构,主要包含以下几种:
注意:我们平常所说的索引,如果没有特别指明,都是指B+树索引。
- B-Tree(多路平衡查找树)
以一颗最大度数(max-degree)为5(5阶)的b-tree为例(每个节点最多存储4个key,5个指针):
- B+Tree
MySQL索引数据结构对经典的B+Tree进行了优化。在原B+Tree的基础上,增加一个指向相邻叶子节点的链表指针,就形成了带有顺序指针的B+Tree,提高区间访问的性能。
以一颗最大度数(max-degree)为4(4阶)的b+tree为例:
相对于B-Tree区别:
1.所有的数据都会出现在叶子节点
2.叶子节点形成一个单向链表
- Hash
哈希索引就是采用一定的hash算法,将键值换算成新的hash值,映射到对应的槽位上,然后存储在hash表中。
如果两个(或多个)键值,映射到一个相同的槽位上,他们就产生了hash冲突(也称为hash碰撞),也可以通过链表来解决。
思考题
3、索引分类
4、索引语法
案例
5、SQL性能分析
- SQL执行频率
- 慢查询日志
- profile详情