MySQL数据库高频面试题
如何实现索引机制?
按照索引分类:B+树 Hash索引 全文索引
InnoDB和MyISAM 索引实现的区别?
InnoDB 表结构、数据和索引是一个文件 .idb
使用B+树实现,叶子节点保存的是每行数据
聚簇索引
MyISAM 表结构、数据和索引文件分开存放的 .sdi
.MYD
.MYI
索引文件只保存所在叶节点的指针,通过指针来读取行中的数据
非聚簇索引,进行回表进而查出指针对应的数据
如果表中没有创建索引,和主键I,系统回默认创建 ROW_ID 索引列
B树和B+树
B树 每个节点存储的是数据
B+树 存储的是数据key 而数据只在最叶子节点才存储的数据
B+树的实现原理
record_type 记录类型
0 普通记录
1 B+树非叶子节点记录 2最小记录 3最大记录
next_record 下一条记录位置
聚簇索引和非聚簇索引优缺点
聚簇索引
优点:
排序和范围查找非常快,由于数据都是紧密相连的,可以从更少的数据块中提取数据,节省大量IO操作
缺点:
插入数据严重依赖插入顺序,按照主键方式插入最快,否则会出现页分裂,严重影响性能
更新主键代价高,会导致被更新的行移动
限制
InnoDB支持聚簇索引 MyISAM不支持聚簇索引
一个表中只能有一个聚簇索引
如果没有定义主键,非空的唯一索引来创建一个隐式的ROW_ID作为聚簇索引
非聚簇索引
在叶子节点中存储的只是一个ID,每页中按照创建的索引列来进行排序
ACID是衡量事务的四个特性:
- 原子性(
Atomicity
) : 事务是最小的执行单位,不允许分割。事务的原子性确保动作要么全部完成,要么完全不起作用; - 一致性(
Consistency
): 执行事务前后,数据保持一致,例如转账业务中,无论事务是否成功,转账者和收款人的总额应该是不变的; - 隔离性(
Isolation
): 并发访问数据库时,一个用户的事务不被其他事务所干扰,各并发事务之间数据库是独立的; - 持久性(
Durability
): 一个事务被提交之后。它对数据库中数据的改变是持久的,即使数据库发生故障也不应该对其有任何影响。
参考
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 ThinkBIM!
评论