索引
2020-05-21 本文已影响0人
无限骄傲
主键索引
索引 B+ 树,结构是由结点16kb的页组成
非叶子节点存的是目录记录页,内部结构为单向链表,顺序排序,链表中每个节点存放一个数据类型,其中, 0为用户数据类型,1为目录记录页,2为本页最小值,3为本页最大值,树中个个节点是双向链表。
主键索引的叶子节点存放的数据是数据本身,包括主键和其他所有数据,也包括隐藏数据,row num等,属于聚簇索引
普通索引
只存放主键和索引的值,属于非聚簇索引
组合索引
最左原则 组合索引中,会根据索引的字段顺序进行依次排序,比如字段a b c 先按a排序,大小相同,再按b排序(实际b也会产生一课树)再按c以此类推。所以查询时候,要先确定a位置,才能使用b查询条件,否则就要遍历所有的页。
命中索引
查询条件顺序,要按照索引顺序,
单一原则. (要保证是用a本身值作为条件,比如where a=4/2 而不能写作where a*2=4)
like语句要遵守最左
使用范围查找时,where a小于10and b>52
不会命中组合索引,只有a=10and b>52才会命中
索引叶子结点只会存储主键和组合索引的值,如果要查询其他的值,要通过主键去主键索引查询,回表操作
索引用途
基数较大时候,就是这个值作为索引时候,最好出现不同的值次数较多
用于分组
用于排序 建立索引时候会进行排序
优化索引
不使用重复索引比如有 a b c就不用建立a
减少索引的值得长度,比如a存储数据长度为100我们可以只取20可以减少建立索引和遍历索引时候的io复杂度