1、索引:获取数据的排好序的数据结构
1)数据结构:(二叉树,红黑树,hash表,B-Tree)
2、B-Tree
3、B+Tree
4、聚集索引
5、非聚集索引:MyISAM 索引文件和数据文件是分离的
6、Hash
7、联合索引
innodb索引实现问题:
1.数据表文件本身就是按照b+树组织的一个索引结构文件。
2.innodb是聚集索引,查找更快一点,因为叶子结点包含了所有的数据。
3.为什么建议innodb必须建立主键:因为如果没有主键,则会取数据列中都不相等的构建b+树,如果没有该种类型的列,则会生成隐藏列去构建,效率低下。
(用户没有定义主键,那么InnoDB会使用第一个非空的唯一索引作为聚簇索引,如果没有唯一索引才会用隐藏的rowid字段)
为什么要主键自增:方便支持范围查找。如果主键无序,则构建b+树过程中会频繁的进行b+分裂,平衡,导致效率低下。
4.为什么非主键索引结构叶子结点存储的是主键值:一致性,只维护一份索引,先维护主键索引,后面直接引用,效率更高。节省空间,共用可以节省空间。
5.为什么要主键自增?答:主键自增是为了顺序插入,避免页数据移动和页分裂,耗费性能,降低查询效率。主键自增不是为了方便范围查询。范围查询的支撑原理是索引的有序性和数据页之间保持关联。B-树就不能范围查询,因为它数据页之间没有关联。
为什么要用B-Tree: B-树是专门为外部存储器设计的,如磁盘,它对于读取和写入大块数据有良好的性能,所以一般被用在文件系统及数据库中。