正确的创建合适的索引是提升数据库的查询性能的基础。索引是为了加速对表中数据的检索而创建的一种分散存储的数据结构。是什么
为什么1、极大地减少存储引擎需要扫描的数据量。2、把随机io编程顺序io。3、帮助我们在分组、排序等操作时避免使用临时表。
二叉树到平衡二叉树再到B-Tree、B+Tree。
平衡二叉树
B-Tree(多路平衡查找树)解决的上边的两个问题。注意:索引不要建太多,增删改时会慢。为了满足绝对平衡,做些复杂的操作。B+Tree(增强版)优点区别左闭合、数据在叶子上、顺序性。
在Myisam中:索引放在.MYI中,数据放在.MYD中。在Innodb中:索引和数据都放在.IBD一个文件中。在Innodb和Myisam两个引擎中呈现的区别。
在Innodb中索引和数据放在一个文件中,当以辅助索引查询时先找到对应的主键再按照主键索引找到数据。Innodb的初衷是这样,修改表儿时为了不对辅助索引进行整理。
对于索引来讲列的离散性越大越好。
对索引中关键字进行计算(对比),一定是从左往右依次进行, 且不可跳过。
单列索引 节点中关键字[name]联合索引 节点中关键字[name,phoneNum]单列索引是特殊的联合索引
联合索引列选择原则1,经常用的列优先 【最左匹配原则】2,选择性(离散度)高的列优先【离散度高原则】3,宽度小的列优先【最少空间原则】
如果查询列可通过索引节点中的关键字直接返回,则该索引为覆盖索引。覆盖索引可减少数据库IO,将随机IO变为顺序IO,可提高查询性能
索引列的数据长度能少则少。索引一定不是越多越好,越全越好,一定是建合适的。匹配列前缀可用到索引 like 9999%,like