一、mysql 45讲

1)索引的本质讲解

  • 定义解释
    所以是帮助Mysql高效获取数据的排好序数据结构

  • 索引数据结构
    ①二叉树
    ②红黑树
    ③Hash表
    ④B-Tree

  • 原理讲解
    Mysql 45讲和45问笔记(未完待续0203/04/24)-LMLPHP
    可以看到右边的数据结构里面,是按照k-v来存数据结构的,key是col2的字段,这个value对应的是这个节点对应数据在磁盘中的地址

2)索引的数据结构详解和索引的规约

①二叉树:当维护逐一增加的的数值,例如从1到9递增时,会退化成链表,查找效率低下
下图是二叉排序树的排序:
Mysql 45讲和45问笔记(未完待续0203/04/24)-LMLPHP
②红黑树(又名二叉平衡树)
1)同一节点只有两个子节点,不如B树,当存储大量节点时候,树的高度太高了,I/O次数太多
2)B+树,分配一个索引节点时候,会分配更大空间,存储更多小索引元素
Mysql 45讲和45问笔记(未完待续0203/04/24)-LMLPHP

③Hash表

④B-Tree
1)对比红黑树增加了更多节点,相同节点更少的I/O磁盘检索次数,也就是更矮的树
Mysql 45讲和45问笔记(未完待续0203/04/24)-LMLPHP
⑤B+Tree
1)数据都放在叶子节点(这里data其实就是数据的地址),非叶子节点不存储数据只存储索引,可以放更多索引
2)叶子节点之间用指针连接,提高区间访问的性能,节点键值从左往右递增
3)下面图里面的一个节点(15和18)默认分配16K的大小,把索引节点的第一个节点提上去作为冗余节点,比如这里的15会被提上去,15傍边空白块就是15节点的指针,当高度为3,一个节点(假设主键为bigint也就是8B,空白块为6B,一个节点16KB,那么一共可以存1170个节点),不同的数据存储引擎不同的data大小,假设data是1KB,那么15+data就是16个索引元素。所以3层一共可存储1170117016个节点,也就是2千多万节点
https://www.bilibili.com/video/BV1ge4y117cM?p=3&spm_id_from=pageDriver&vd_source=27ec8b3b09d2a66ceeb9dbe961a247d3
7:37
Mysql 45讲和45问笔记(未完待续0203/04/24)-LMLPHP

索引规约
1)业务上具有唯一特性的字段,即使是组合字段,也必须建成唯一索引
2)
(1)超过三个表禁止join
(2)需要join的字段,数据类型保持绝对一致
(3)多表关联查询时,保证被关联的字段需要有索引
(注意:即使双标join也要注意表索引、SQL性能)
3)在varchar字段上建立索引时,必须指定索引长度,没必要对全字段建立索引,根据文本区分度决定索引长度

二、myqsl 45问

04-25 12:16