这个随笔就是记录一些我对 mysql 的理解
包括不仅限于(后续会更新)
mysql数据库常见引擎 innodb myisam 以及索引类型对应
索引结构和索引类型 b+树
MVCC 版本控制
3.1 乐观锁
3.2 悲观锁(间隙锁 排它锁)
4.mysql 的数据库隔离级别 (为什么在rr级别下能实现s级别)
5.mysql 的读操作
MyISAM存储引擎在筛选大量数据时非常迅速,这是它最突出的优点
在做读写分离中 读表的引擎就可以为mysiam 像是count(*) 这类的操作 是要比innodb引擎快的
mysiam引擎是但是 mysiam 不支持外键和事务 5.6之前只有myisam支持全文索引 5.6之后innodb也支持
在mysql5.6版本以上被作为默认引擎,并且加入了行级锁定与外键约束。
在所有的引擎中只有innodb引擎支持外键!
支持事务,并且最重要的是他能回滚死锁,可以说是量身为并发高的系统打造的
这个引擎了解不是很多,但是这个引擎会把数据存放在内存上 数据从内存上读取 速度非常快 不过如果断电 数据就没了 我想应该没有人会用,毕竟已经可以用redis 替代了
1.唯一索引 列值不允许重复
2.主键索引 特殊的唯一索引 一个表上仅可出现一个
3.普通索引 没有任何限制
4.组合索引 多个字段的组合索引
5.全文索引 主要用来查找文本中的关键字,而不是直接与索引中的值相比较。它更像是一个搜索引擎,但是为什么不试试功能更强大的ElasticSearch呢
我们平常所说的索引,如果没有特别指明,都是指B+树结构的索引
mysql索引数据结构对经典的B+Tree进行了优化
如果要看懂b+树 我们先需要知道b树
b树又叫又叫多路平衡搜索树
*树中每个节点最多包含m个孩子
*除根节点与叶子节点外,每个节点至少有[ceil(m/2)]个孩子
*若根节点不是叶子节点,则至少有两个孩子
*所有的叶子节点都在同一层
*每个非叶子节点由n个key与n+1个指针组成,其中[ceil(m/2)-1] <= n <= m-1
BTREE树 和 二叉树 相比, 查询数据的效率更高, 因为对于相同的数据量 来说,BTREE的层级结构比二叉树小,因此搜索速度快
b+树为b树的变种
主要区别:
*n叉B+Tree最多含有n个key,而BTree最多含有n-1个key
*b+树的叶子节点保存所有的key信息,依key大小顺序排列
*所有的非叶子节点都可以看作是key的索引部分
由于b+树只有叶子节点保存key信息,查询任何key都要从root走到叶子。所以b+树的查询效率更加稳定
mysql索引数据结构对经典的b+树进行了优化。在原b+树的基础上,增加一个指向相邻叶子节点的链表指 针,就形成了带有顺序指针的b+树,提高区间访问的性能
类似hashmap的存储方式 Hash索引中存放的是经过Hash计算之后的Hash值
不是很了解,查阅资料 也是说很少使用
版本控制指
innodb通过undolog可以找回数据的历史版本找回的数据历史版本可以提供给用户读,就比如说普通的select语句都是快照读
-----------后续更新
原文:https://www.cnblogs.com/kyousuke/p/12931520.html