索引
索引的用处
- 相当于图书的目录,可以根据页码快速查找到
为什么用B+树
-
平衡二叉树每个节点只能存放1个数据,并且最多只能有两个子节点,当数据很多后,层数也会很多
-
B树–平衡多路查找树,每个节点允许有多个子节点,B树中的key表示键,而data表示了这个键对应的条目在硬盘上的逻辑地址
- 所有的节点都存放了搜索关键字和关键字所对应的数据
-
B+树
- 非叶子节点只存放搜索关键字,所有相关的数据信息全部放在叶子节点上
- 叶子节点之间会连接起来,形成链表
- 扫库扫表的能力更高
mysql索引的实现
- MyISAM
- 不管是主键索引还是二级索引,叶子节点上都只有搜索关键字和对应的内存地址,这两种索引的存储没有任何区别
- 先通过索引找到相应的地址,然后再去磁盘上读取相应的数据
- 有单独的索引文件
- Innodb
- 数据文件本身就是按B+树组织的
- 主键索引的叶子节点保证了完整的数据记录,又称为聚集索引。索引innodb的表里要求必须有主键
- 二级索引的data域存放的不再是内存地址,而是存放的主键索引位置
- 所以主键索引搜索变得非常高效,而二级索引需要多查一次