MySQL技术内幕:InnoDB存储引擎
第1章 MySQL体系结构和存储引擎
MySQL被设计为一个单进程多线程架构的数据库。MySQL数据库实例在系统上的表现就是一个进程。
第4章 表
约束
- Primary Key
- Unique Key
- Foreign Key
- Default
- NOT NULL
创建了一个唯一索引,就创建了一个唯一的约束。约束更是一个逻辑的概念,用来保证数据的完整性;而索引是一个数据结构,有逻辑上的概念,在数据库中更是一个物理存储的方式。
触发器
|
|
外键
|
|
视图
视图是一个命名的虚表,它由一个查询来定义,可以当做表使用。视图中的数据没有物理表现形式。主要用途之一是被用做一个抽象装置。
|
|
第5章 索引与算法
InnoDB存储索引支持两种常见的索引,一种是B+树索引,另一种是哈希索引。
B+树
在B+树中,所有记录节点都是按照键值的大小顺序存放在同一层的叶节点中,各叶结点指针进行连接。
B+树索引
B+索引在数据库中有一个特点就是其高扇出性,因此在数据库中,B+树的高度一般在2~3层,也就是对于查找某一键值的行记录,最多只需要2到3次IO。减少IO次数
B+树索引可以分为聚集索引和辅助聚集索引(非聚集索引)。不同点是叶节点存放的是否是一整行的信息。
聚集索引
聚集索引就是按照每张表的主键构造一颗B+树,并且叶节点中存放着整张表的行记录数据,因此也让聚集索引的叶节点成为数据页。
由于实际的数据页只能按照一颗B+树进行排序,因此每张表只能拥有一个聚集索引。
好处
- 主键的排序查找
- 范围查询
辅助索引
叶级别不包含行的全部数据。叶节点除了包含键值以外,每个叶级别中的索引行中还包含了一个书签,用来告诉存储引擎哪里可以找到与索引相对应的行数据。
辅助索引的存在并不影响数据在聚集索引中的组织,因此每张表上可以有多个辅助索引。通过辅助索引来寻找数据时,InnoDB存储引擎遍历辅助索引并通过叶级别的指针获得指向主键索引的主键,然后再通过主键索引来找到一个完整的行记录。
索引的创建
|
|
B+树索引的使用
访问表中很少一部分行时,使用B+树索引才有意义。
如果某个字段的取值范围很广,几乎没有重复性,即高选择性,使用B+树索引是最适合的,但是取出的行数占表中大部分的数据时,MySQL数据库不会使用B+树索引。
联合索引
联合索引是指对表上的多个列做索引。
通过叶节点可以逻辑上顺序地读出所有数据,可以对第二个键值进行排序。
哈希算法
InnoDB存储引擎中自适应哈希索引使用的是散列表的数据结构。
第6章 锁
InnoDB存储引擎中的锁
索的类型
- 共享锁:允许事务读一行数据
- 排他锁:允许事务删除或者更新一行数据
第7章 事务
ACID
原子性atomicity
整个数据库事务是不可分割的单位。
一致性consistency
数据库从与一种状态转变为下一种一致的状态。事物开始之前和事务结束以后,数据库的完整性约束没有被破坏。
隔离性isolation
一个事务的影响在该事务提交前对其他事务都不可见,通过锁实现。
持久性durability
事务一旦提交,其结果就是永久性的。
事务控制语句
|
|
事务的隔离级别
- READ UNCOMMITED
- READ COMMITED
- REPEATABLE READ
- SERIALIZABLE