存储引擎 MyISAM 和 InnoDB 的区别

  1. 是否支持行级锁:MyISAM 只支持表级别锁,而InnoDB支持行级锁,默认未行级锁。
  2. 是否支持事务和崩溃后的安全恢复:
  3. 是否支持MVCC: 仅InnoDB 支持,对应事务高并发

MySQL 索引
主要分为:哈希表索引,有序数组,搜索树

  • 哈希表索引只适用于等值查询的场景,因为它不是有序存储的,所以哈希索引做区间查询的速度是很慢的,需要全部扫描一遍
  • 有序数组在等值查询和范围查询场景中性能都比较好,但是它只适用于静态存储引擎(保存不会再修改的数据),中间插入记录的话,就会挪动后面的所有记录
  • 搜索树一般是N叉树,这样可以减小树的高度,尽可能小的读取磁盘。

InnoDB 的索引模型

  • 使用了B+ 树索引模型,所以数据都是存储在B+树模型中的。
    • 主键索引的叶子节点存的是整行数据,在InnoDB中,主键索引被称为聚簇索引。
    • 非主键索引的叶子节点的内容是主键的值。在InnoDB中,非主键索引也被称为二级索引。
    • (基于非主键索引的查询需要多扫描一颗索引树,因此,应用中尽量使用主键查询)


B树和B+树区别

乐观锁与悲观锁

  • 乐观锁:乐观锁在操作数据时非常乐观,认为别人不会同时修改数据。因此乐观锁不会上锁,只是在执行更新的时候判断一下在此期间别人是否修改了数据:如果别人修改了数据则放弃操作,否则执行操作。
  • 悲观锁:悲观锁在操作数据时比较悲观,认为别人会同时修改数据。因此操作数据时直接把数据锁住,直到操作完成后才会释放锁;上锁期间其他人不能修改数据。