MYSQL之索引原理
一、索引原理
1,什么是索引?
索引在MySQL中也叫‘键’或者‘key’,是存储引擎用于快速找到记录的一种数据结构。索引对于良好的性能非常关键,尤其是当表中的数据量越来越大时,索引对于性能的影响愈发重要,减少IO次数,加快查询。
2,索引的数据结构:b+树
上图就是一个b+树的数据结构,我们的InnoDB索引的数据就是以这种结构存放的。比如说我们要查找29,首先会把磁盘块1加载到内存,发生一次IO,发现29在17和35 中间,就锁定磁盘块中的p2指向的磁盘模块3,然后把磁盘块3加载到内存,发生第二次IO,发现29在26和30之间,就锁定磁盘块3中p2指向的磁盘块8,然后把磁盘块8加载到内存,发生第三次IO,此时和29相比,有一值等于29,从而就找到了29。这样的b+树可以表示上百万的数据,如果上百万的数据查找也只需要三次IO,那么性能提高是非常大的,如果没有索引,每次数据项都要发生一次IO,总共需要上百万次的IO,得花多少时间。
3,b+树的性质
3.1 索引字段要尽量的小
通过上面的例子来看,基本上是b+树的层级高度决定了IO的次数,也决定了查询的效率,所以,要提高效率就应该减少b+树的高度。对于每个磁盘块所能存放的数据量是有限的。假设当前的所有数据大小为N,每个磁盘能存放某个数据的个数为m=磁盘块的大小/每个数据的大小,则高度为h=log(m+1)N,当数据一定时,m越大,h就越小。说明每个数据越小,高度越低,IO次数就越少,效率就更高。所以我们在建立索引的时候喜欢用id字段,而不是name字段,数字类型肯定比char类型占的空间小嘛。
3.2 索引的最左匹配原则特性
查询数据是从数据块的左边开始匹配,再匹配右边的。
二、聚集索引与辅助索引
数据库中的b+树索引可以分为聚集索引和辅助索引
相同点:其内部都是b+树的形式,叶子节点都存放着数据
不同点:聚集索引存放的是一整行所有数据,而辅助索引只存放索引字段的数据+主键
1,聚集索引
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/151/viewspace-3142791/ ,如需转载,请注明出处,否则将追究法律责任。