mysql随笔

mysql 随笔

前言

这个随笔就是记录一些我对 mysql 的理解

包括不仅限于(后续会更新)

  1. mysql数据库常见引擎 innodb myisam 以及索引类型对应

  2. 索引结构和索引类型 b+树

  3. MVCC 版本控制

    3.1 乐观锁

    3.2 悲观锁(间隙锁 排它锁)

4.mysql 的数据库隔离级别 (为什么在rr级别下能实现s级别)

5.mysql 的读操作

1.数据库引擎

1.mysiam

MyISAM存储引擎在筛选大量数据时非常迅速,这是它最突出的优点

在做读写分离中 读表的引擎就可以为mysiam 像是count(*) 这类的操作 是要比innodb引擎快的

mysiam引擎是但是 mysiam 不支持外键和事务 5.6之前只有myisam支持全文索引 5.6之后innodb也支持

2.innodb

在mysql5.6版本以上被作为默认引擎,并且加入了行级锁定与外键约束。

在所有的引擎中只有innodb引擎支持外键!

支持事务,并且最重要的是他能回滚死锁,可以说是量身为并发高的系统打造的

3.memory

这个引擎了解不是很多,但是这个引擎会把数据存放在内存上 数据从内存上读取 速度非常快 不过如果断电 数据就没了 我想应该没有人会用,毕竟已经可以用redis 替代了

2.索引结构和索引类型

1. 5种索引类型

1.唯一索引 列值不允许重复

2.主键索引 特殊的唯一索引 一个表上仅可出现一个

3.普通索引 没有任何限制

4.组合索引 多个字段的组合索引

5.全文索引 主要用来查找文本中的关键字,而不是直接与索引中的值相比较。它更像是一个搜索引擎,但是为什么不试试功能更强大的ElasticSearch呢

2. 索引的结构

1.BTREE索引

我们平常所说的索引,如果没有特别指明,都是指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+树,提高区间访问的性能

2.HASH 索引

类似hashmap的存储方式 Hash索引中存放的是经过Hash计算之后的Hash值

3.R-tree 索引

不是很了解,查阅资料 也是说很少使用

3.MVCC 版本控制

版本控制指的是一种提高并发的技术。最早的数据库系统,只有读读之间可以并发,读写,写读,写写都要阻塞。引入多版本之后,只有写写之间相互阻塞,其他三种操作都可以并行,这样大幅度提高了innodb的并发度

innodb通过undolog可以找回数据的历史版本找回的数据历史版本可以提供给用户读,就比如说普通的select语句都是快照读

 

 

-----------后续更新

mysql随笔

上一篇:deno + mongodb 实战踩坑记


下一篇:MYSQL:大量数据的插入更新