MySQL索引相关
2020-12-15 23:12:33 0 举报
MySQL索引相关
作者其他创作
大纲/内容
数据行
主键
数据页
最左前缀匹配原则:如果用like语法查询,如果查询的字符左边匹配也是可以走索引,如 select * from student where name like 'n%'
槽位
页目录
聚簇索引:如果叶子结点是数据页本身,则该B+树索引为聚簇索引,在增删改查数据的时候会去维护索引页
索引页号
数据页之间通过双向链表进行连接,每个数据页内的数据行是单向链表组成的,按主键大小排列根据主键查找先通过二分查找定位到具体数据页,然后通过页目录定位主键对应的槽位,对内内数据进行遍历查找即可MySQL中为了防止页分裂一般设置自增id作为主键索引的存储也是通过B+树进行存储的当根据索引来查询数据时,先根据该索引的B+tree顶层索引页来进行二分查找,逐层查找找到叶子节点,如果是主键索引则为数据,如果是普通索引则根据主键id进行一次回表查找(非主键索引叶子节点存储的是索引值和对应的主键id)如果B+树种非叶子节点的索引页中数据过多,会自动分裂,增删改数据都会自动维护索引页每增加索引都需要去维护一个索引树,会耗费大量空间,而且增删改需要维护所有索引树中的数据顺序会有很大的成本,因此并不是索引越多越好
最顶层索引页
索引页
选择建立索引的时候一般选择基数比较大的字段(即值比较多的字段),可以发挥B+数快速二分查找的优势在进行查询操作时where语句后不能使用函数计算,否则会用不上索引
最小id
B+数叶子结点数据结构
最左侧列原则:对于联合索引,假设有三个字段,如果只有第一个字段或者第一加第二个字段能匹配上也会走索引进行查询
联合索引:对于联合索引而言,每个结点存储的是联合索引中各个字段值和主键,查找的话是按照从左到右的一个字段一个字段的进行二分查找,如果第一个字段对应多个值,再按照第二个字段进行查找,以此类推
包含页目录
收藏
收藏
0 条评论
回复 删除
下一页