正确的创建合适的索引是提升数据库查询性能的 使用b+树实现
索引 是为了加速对表中数据行的检索而创建的一种分散存储的数据结构
为什么要用索引?
索引能极大的减少 存储引擎需要扫描的数据量 索引 可以把随机IO 变成顺序IO 索引 可以帮助 我们在进行 分组、 排序等操作时,避免使用临时表
平衡二叉树:
缺点:
它太深了 数据处的(高)深度决定着他的IO 操作次数,IO 操作耗时大它太小了 每一个磁盘块 (节点/ 页) 保存的数据量太小了 没有很好的利用操作磁盘IO 的数据交换特性,也没有利用好磁盘IO 的预 读能力(空间局部性原理 ),从而带来频繁的IO多路平衡查找数B Tree:
加强版多路平衡查找数 B+数:
B+TRee与B Tree的区别:
B+ 节点关键字搜索采用闭合区间B+ 非叶节点不保存数据相关信息,只保存关键字和子节点的引用B+ 关键字对应的数据保存在叶子节点中B+ 叶子节点是顺序排列的,并且相邻节点具有顺序引用的关系为什么选择B+Tree?
B+ 树是B- 树的变种(PLUS 版)多路绝对平衡查找树,他拥有B- 树的优势B+ 树扫库、表能力更强B+ 树的磁盘读写能力更强B+树 树 的排序能力更强B+ 树的查询效率更加Myisam
Innodb
Innodb与Myisam对比
越大离散型越好
离散性越高选择性就越好 比如性别建索引不太好 选择性太差还不如全表扫描
对索引中关键字进行计算(对比),一定是从左往右依次进行,且不可跳过
单列索引:节点中关键字[name] 联合索引:节点中关键字[name,phoneNum] 单列索引是特殊的联合索引 联合索引列选择原则:
经常用的列优先 【 最左匹配原则 】选择性(离散度)高的列 优先 【 离散度高原则 】宽度小的列 优先 【 最少空间原则】如果查询列可通过索引节点中的关键字直接返回,则该索引称之为覆盖索引。 覆盖索引可减少数据库IO,将随机IO变为顺序IO,可提高查询性能
所以才不让用select* 被命中索引就不用回表了
点关注不迷路:
