MySQL数据库索引
1、 什么是数据库索引
MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度
2、 为什么使用B+树作为数据库索引,而不选择B树,红黑树,二叉搜索树?
- B+树是多路平衡查找树,并且所有数据都放在叶子节点,通过链表链接。
- 与B树相比,B+树的查找时间稳定,由于数据存放在叶子节点,所以避免了中序遍历跨层寻找。
- 与二叉搜索树相比,如果是有序集合,会退化成链表,二叉搜索树高度会随着数据量增大变大
3、 hash索引和B+树索引
对于单条查询来说,hash索引时间复杂度为O(1),但是对于多条数据查询,同时如果还需要排序,分组,比较的时候,树型结构的索引更加合适
4、数据库基本结构
- InnoDB 存储引擎中,所有的数据都被逻辑地存放在表空间中,表空间(tablespace)是存储引擎中最高的存储逻辑单位,在表空间的下面又包括段(segment)、区(extent)、页(page),行(Row)
- 每页默认大小为16k,每个 16KB 大小的页中可以存放 2-200 行的记录
- 每次查询数据时,会按页加载数据到B树节点,磁盘读写并不是按需读取,而是按页预读,这就是磁盘预读,如果未来要读取的数据就在这一页中,可以避免未来的磁盘IO,提高效率。
5、数据库索引的类型
在Innodb中
聚集索引 聚集索引中存放一行的所有记录,所有正常表有且仅有一个聚集索引,一般就是主键,表行记录按照聚集索引顺序存放的
辅助索引 存放索引列以及存放一个用于查找对应列的“书签”,使用辅助索引查询对应主键,再通过聚集索引查询对应行记录