索引
为了加速对表中数据行的检索而创建的一种分散存储的数据结构
为什么使用索引
1·极大减少存储引擎扫描数据量
2·可把随机OI变为顺序IO
3·索引可以帮助我们再进行分组、排序等操作时,避免使用临时表
加强版B TREE
为什么是B+TREE
1·B+树是B树的变种,多路绝对平衡查找树,拥有B树优势
2·树扫库、表能力更强(B每个节点都有关键字,B+只需要扫子节点)
3·树的磁盘读取能力更强(枝节点不保证是关键字:数据,所以可以索引的关键字就更多,读取能力更强)
4·排序能力强
5·查询效率更稳定
绝对平衡树(3分支)
坐闭合
只有数据只在叶子节点
Innodb 以主键为索引来组织数据的存储(聚集索引:在叶子节点保存所有信息)
数据和索引放一起,一个IBD文件
Myisam 两个文件MYI,MYD;数据和索引分开存放
列的离散性:离散性越好,选择性越好(越大选择性越好)
联合索引
单列索引
联合索引
联合索引原则
1最经常用的优先放左边(最左匹配原则,
2离散度高原则,
3宽度小优先(最少空间原则
覆盖索引:
覆盖索引,如果查询列可通过索引节点中的关键字直接返回,则该索引称之为覆盖索引。
覆盖索引可减少数据库IO,将随机IO变为顺序ID,提高查询性能。
select a,b from user where a=?
a,b可能是一个已建立的索引,这样可能会命中索引,可提高效率