面经

索引的实现原理

InnoDB也使用B+Tree作为索引结构。InnoDB支持聚簇索引,聚簇索引就是表,所以InnoDB的数据文件本身就是索引文件。

B+Tree 的每个叶子节点都包含了主键值、事务ID、用于事务和MVCC的回滚指针以及所有的剩余列。非叶子节点只需要存储索引信息

InnoDB的二级索引的叶子节点存储的不是行号,而是主键列,所以二级索引需要两次索引查找,第一次在二级索引中查找主键,第二次在聚簇索引中通过主键查找需要的数据行。

聚簇索引的优点

可以把先关数据存储在一起,减少数据查询时的裁判I/O

数据访问效率更快,因为聚簇索引就是表,索引和数据保存在一个B+Tree中

使用索引覆盖的查询时可以直接使用页节点中的主键值

聚簇索引的缺点

插入的速度严重依赖插入顺序

更新聚簇索引列的代价很高,因为会强制InnoDB把更新的列移动到新的位置(自己的理解就是,已经构建完成的B+Tree索引结构,当改变索引列,需要重构新的B+tree结构)

基于聚簇索引的表,在插入新行,或者主键被更新导致需要移动行的时候,可能会导致页分裂。(当行的主键值要求必须将这一行数据插入到当前已满的页中,存储引擎将会将该页分裂为两个页来容纳该行,页分裂会导致表占用更多的存储空间)

ps:数据库系统的设计者巧妙利用了磁盘预读原理,将一个节点的大小设为等于一个页,这样每个节点主需要一次磁盘I/O就可以完全载入

应用

基于InnoDB的索引特点,我们建索引时尽量使用与应用无关的主键,自增主键:每条新纪录总是在前一条记录的后面插入:

数据库的隔离原则

原子性:事务是一个包含一些列操作的原子操作。事务的原子性确保这些操作全部完成或者全部失败

一致性:事务的执行不能破坏数据库数据的完整性和一致性,一个事务在执行之前和执行之后,数据库都必须处于一致性状态。

隔离性:数据库允许多个并发事务同事对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行由于交叉执行二导致数据的不一致

持久性:事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失。

 

posted @ 2021-08-30 17:29  K峰  Views(115)  Comments(0)    收藏  举报