Mysql底层

个人总结mysql相关知识:
第一方面:
在mysql执行计划中有三个重要数据需要关注:type代表查询对应的类型,all index system const range refore 之所以加索引优化,就是让此类型尽可能变为range refore, key :代表有没有用到索引 尽量不要让其变为Null。extra:额外的一些信息,看是用到了索引的覆盖还是临时空间存储
第二方面:
索引分为主键、普通、唯一、复合四大主要索引,一般用采用inno DB存储引擎,索引是提高查询效率的,其中涉及到回表(查询普通索引根据B+树结构找到对应的叶子节点对面id的值,再根据id去id的B+树中检索引擎,应避免回表)、最左匹配(一般多个列进行索引,遵循索引的最左匹配,mysql底层自动优化,即使不分顺序也不影响)、索引下推(把server层进行条件过滤下推到存储引擎层)
第三部分:
存储结构使用B+树(去除了B树中每个节点的data数据),每一个节点中存储一个磁盘指针、key、每一个指针指向下一个叶子节点磁盘的地址,这样,一般3-4层B+树存储结构可以存储千万级别的数据,B树只能存储4000条左右
第四部分:
MVCC 定义:多版本并发控制,因为加锁会降低查询效率,才有了它。
包含三个部分,
第一部分:隐藏字段(TRX-ID、ROW-ID、ROW-PTR)一个是创建或者最后一次修改该记录的事物,一个是隐藏主键,一个是回滚指针。配合第二个部分undolog。
第二部分undolog:回滚指针,记录增删改历史数据版本,防止破坏事物一致性。底层会自动生成链表,记录每一次修改数据的版本,头信息就是最近的一次记录。
第三部分是readview事物在进行快照读的时候产生的视图层。

你可能感兴趣的:(笔记)