标签:io操作 树的定义 引擎 简介 alt rom 移动 color 缺点
索引是为了加速对表中数据行的检索二创建的一种分散存储的数据结构
为了说明索引的数据结构,先对比一下几种常见的数据结构特点
在二叉树中,左子树的键值总是小于根的键值,右子树的键值总是大于根的键值
当插入数据都大于节点时会形成线性链表结构。所以二叉树查找效率取决于数据的分布
首先符合二叉查找树的定义,其次必须满足任何节点的两个子树的高度最大差为1
为了达到平衡需要经过1次或多次的左旋和右旋操作,虽然查找速度比普通二叉树快了,但是维护成本增加
缺点:
深度太大:数据所处的深度决定了它的IO操作次数,IO操作耗时大
容量太小:每一个磁盘块(节点、页)保存的数据量太小了
没有很好的利用操作磁盘IO的数据交换特性
也没有利用好磁盘IO的预读能力(空间局部性原理),从而带来频繁的IO操作
特点:
不再是二叉搜索,而是m叉搜索
叶子节点,非叶子节点都存储数据;
中序遍历,可以获得所有节点
B+Tree是在BTree的基础上进化而来
B+Tree和BTee的区别:
由这个特点可得出:定义数据类型时尽量短,有利于索引的创建,可容纳更多的数据;
选择索引关键字时尽量选择小的字段,增加索引的容量;
索引过多会影响UPDATE,INSERT操作效率,因为要保证索引树的绝对平衡需要移动很多索引节点
3.B+Tree关键字对应的数据保存在叶子节点中
4.B+Tree叶子节点是顺序排列的,并且相邻节点具有顺序引用的关系,增加了链表结构,(获取所有节点不再需要中序遍历,本身就是有序排列的,且相邻节点也是通过链表有序连接的;范围查找优化)
相对于Btree,B+Tree优点:
根据上述各种数据结构的比较,显然B+Tree最适合作为索引的数据结构,MySQL中索引就是用的B+Tree结构
MyIsam存储引擎数据分两个文件存储MYD(数据文件)和MYI(索引文件),还有默认的frm(表结构描述文件)
主键索引叶子节点不存储数据,只存储数据地址,指向MYD文件
辅助索引结构和主键索引一样
聚集索引:数据库表中数据的物理顺序与键值的逻辑顺序(索引)相同,顺序IO查找
由上面的索引结构可以推断出索引的优化原理
离散性越高,选择性越好(离散性低的数据重复多,选择就多,不利于检索数据。尽量选择离散性高的列来建立索引)
对索引中关键字进行计算(对比),一定是从左往右依次进行,且不可跳过
联合索引列选择原则:
例:假如存在联合索引name,phoneNum
则 select * from where name = ? 会命中该联合索引【最左匹配原则】,跟 like "xxx%"能使用索引原理一样
联合索引中存在某个列就不需要再对此列建索引
索引字段最好不要允许为空,null在mysql中需要特殊处理增加运算和空间
唯一索引允许多个数据为null
索引列的数据长度能少则少(所以在定义表结构时尽量定的数据类型长度合理,且不要在长字段上建立索引)
索引要创建合适,过多索引反而会影响效率,且迁移麻烦,存储增大,删除、修改、新增时非常影响效率,因为数据改变索引也会跟着改变,索引维护耗费性能
匹配列前缀可用到索引 like xxx%, like %xxx%、 like %xxx用不到索引;
where条件中 not in 和<>操作无法使用索引;
多用指定列查询,只返回需要的数据列,尽量避免 select *
联合索引中如果不是按照索引最左列开始查找,无法使用索引
联合索引中精确匹配最左前列并范围匹配另外一列可以用到索引;
联合索引中如果查询中有某个列的范围查询,则其右边的所有列都无法使用索引;
标签:io操作 树的定义 引擎 简介 alt rom 移动 color 缺点
原文地址:https://www.cnblogs.com/zh-ch/p/12810627.html