打工四年总结的数据库知识点( 二 )
文章插图
存储引擎InnoDBInnoDB 是 MySQL 默认的事务型存储引擎 , 只要在需要它不支持的特性时 , 才考虑使用其他存储引擎 。
InnoDB 采用 MVCC 来支持高并发 , 并且实现了四个标准隔离级别(未提交读、提交读、可重复读、可串行化) 。 其默认级别时可重复读(REPEATABLE READ) , 在可重复读级别下 , 通过 MVCC + Next-Key Locking 防止幻读 。
主索引时聚簇索引 , 在索引中保存了数据 , 从而避免直接读取磁盘 , 因此对主键查询有很高的性能 。
InnoDB 内部做了很多优化 , 包括从磁盘读取数据时采用的可预测性读 , 能够自动在内存中创建 hash 索引以加速读操作的自适应哈希索引 , 以及能够加速插入操作的插入缓冲区等 。
InnoDB 支持真正的在线热备份 , MySQL 其他的存储引擎不支持在线热备份 , 要获取一致性视图需要停止对所有表的写入 , 而在读写混合的场景中 , 停止写入可能也意味着停止读取 。
MyISAM设计简单 , 数据以紧密格式存储 。 对于只读数据 , 或者表比较小、可以容忍修复操作 , 则依然可以使用它 。
提供了大量的特性 , 包括压缩表、空间数据索引等 。
不支持事务 。
不支持行级锁 , 只能对整张表加锁 , 读取时会对需要读到的所有表加共享锁 , 写入时则对表加排它锁 。 但在表有读取操作的同时 , 也可以往表中插入新的记录 , 这被称为并发插入(CONCURRENT INSERT) 。
可以手工或者自动执行检查和修复操作 , 但是和事务恢复以及崩溃恢复不同 , 可能导致一些数据丢失 , 而且修复操作是非常慢的 。
如果指定了 DELAY_KEY_WRITE 选项 , 在每次修改执行完成时 , 不会立即将修改的索引数据写入磁盘 , 而是会写到内存中的键缓冲区 , 只有在清理键缓冲区或者关闭表的时候才会将对应的索引块写入磁盘 。 这种方式可以极大的提升写入性能 , 但是在数据库或者主机崩溃时会造成索引损坏 , 需要执行修复操作 。
InnoDB 和 MyISAM 的比较
- 事务:InnoDB 是事务型的 , 可以使用 Commit 和 Rollback 语句 。
- 并发:MyISAM 只支持表级锁 , 而 InnoDB 还支持行级锁 。
- 外键:InnoDB 支持外键 。
- 备份:InnoDB 支持在线热备份 。
- 崩溃恢复:MyISAM 崩溃后发生损坏的概率比 InnoDB 高很多 , 而且恢复的速度也更慢 。
- 其它特性:MyISAM 支持压缩表和空间数据索引 。
B+ Tree 是 B 树的一种变形 , 它是基于 B Tree 和叶子节点顺序访问指针进行实现 , 通常用于数据库和操作系统的文件系统中 。
B+ 树有两种类型的节点:内部节点(也称索引节点)和叶子节点 , 内部节点就是非叶子节点 , 内部节点不存储数据 , 只存储索引 , 数据都存在叶子节点 。
内部节点中的 key 都按照从小到大的顺序排列 , 对于内部节点中的一个 key , 左子树中的所有 key 都小于它 , 右子树中的 key 都大于等于它 , 叶子节点的记录也是按照从小到大排列的 。
每个叶子节点都存有相邻叶子节点的指针 。
文章插图
操作查找
查找以典型的方式进行 , 类似于二叉查找树 。 起始于根节点 , 自顶向下遍历树 , 选择其分离值在要查找值的任意一边的子指针 。 在节点内部典型的使用是二分查找来确定这个位置 。
插入
- Perform a search to determine what bucket the new record should go into.
- 腾讯申请「打工鹅」商标,网友:“虾仁猪心”
- 库克靠打工实现1个亿“小目标”iPhone 12全球热销功不可没
- 支付宝打造的天价蚂蚁森林,四年时间过去了,现在长成什么样了?
- 没有人在意你的网易云年终总结
- 商标|腾讯申请打工鹅商标
- 资深打工人回血神器,荣泰RT6908S按摩椅评测
- 腾讯企鹅跟上“打工人”热潮!背后暗藏港股之王的成功秘诀
- 腾讯申请“打工鹅”商标
- 腾讯云交出阶段性年终总结,发布5G产品矩阵
- 小白财经|一图看懂5G毫米波