索引概述
索引是存储引擎用于快速查找的一种帮助SQL高效获取数据的数据结构(类似于指针,如书本的目录一样,用于快速寻找对应的内容),避免了全表扫描:一条条数据查找,直到找到目标。
索引是在存储引擎中实现的,存储引擎可以定义每个表的最大索引数和最大索引长度,所有存储引擎支持每个表至少16个索引,总索引长度至少为256字节。
索引的最主要目的是为了减少磁盘I/O次数,提高查询效率。
索引的不足
1. 创建索引和维护索引需要消耗时间,并且随数据的数量增加,消耗的时间也会增加;
2. 索引需要占用磁盘空间;
3. 虽然索引提高了查询速度,但同时会降低更新表的速率,当对表中数据进行增、删、改时索引也要动态维护,这样就降低了数据的维护速度。(在插入数据时,最好是先删除表中索引,插入完后再创建索引,以此来提高效率)
InnoDB索引
InnoDB支持的常见索引:
- B+Tree索引
- 全文索引(5.6.4及以后版本)
- hash索引 (容易发生hash碰撞,不能人为干涉,只能系统使用)
MyISAM索引
MyIASM中常用的索引是**B+Tree索引**,并且都是 **非聚簇类型**的(索引和数据分开存储):
- 将表中的数据单独存储到一个文件夹中,称之为**数据文件**,在插入数据时没刻意按照主键大小排序,固不能在这些数据上使用二分法进行查找;
- MyISAM会单独为表的主键创建一个索引,把索引信息存放到另一个文件中(**索引文件**),用于索引的叶子节点只存放了 **主键+数据记录地址**,用于回表操作。
后续更新.....