通过索引查找相关数据,避免全表扫描。主要目的是为了减少磁盘IO次数,加快查询效率。
索引是在存储引擎中实现的帮助MySQL高效获取数据的数据结构,可以在其基础上实现高级查找算法。
优点:
1、提高数据检索的效率,降低数据库的IO成本。
2、通过创建唯一索引,可以保证数据库表中每一行的数据唯一性。
3、对于有依赖关系的子表和父表联合查询,可以提高查询速度。
4、使用分组和排序子句进行数据查询时,可以显著减少查询中分组和排序的时间,减少CPU消耗。
缺点:
1、创建索引和维护索引要耗费时间
2、索引需要占磁盘空间
3、虽然索引大大提高了查询速度,同时也会降低更新表的速度。
聚簇索引是一种数据存储方式,即所有的用户数据都存储在了叶子结点上,也就是索引即数据,数据即索引。
特点:
页内记录
按照主键大小顺序排成单向链表
存放用户数据的页
按照主键大小排成双向链表
目录项记录的页
按照主键大小排成双向链表
拥有这两种特性的B+树称为聚簇索引。InnoDB引擎会自动的为我们创建聚簇索引,不需要显示创建。
优点:
缺点:
限制:
概念:回表
? 如果想要根据非主键列的值查找到完整的用户记录的话,仍然需要到聚簇索引中再查一遍,这个过程称为回表。
回表操作的意义:为什么不把完整用户数据放到二级索引的叶子结点
由于这种按照非主键列所建立的B+树需要一次回表操作才可以定位到完整的用户记录,所以这种B+树也被称为二级索引。如果把完整的用户数据放到叶子结点是可以不用回表,但是这就相当于每建立一颗 B+树都需要把所有的数据都拷贝一遍,过于浪费存储空间。
聚簇索引与非聚簇索引的区别:
1、聚簇索引的叶子结点存储的是数据记录,非聚簇索引的叶子结点存储的是数据位置。非聚簇索引不会影响数据表的物理存储顺序。
2、一个表只能有一个聚簇索引,即只能有一种排列存储方式,但可以有多个非聚簇索引,也就是多个索引目录提供数据检索。
3、使用聚簇索引时数据的查询效率高,但是插入、删除、更新操作,效率比非聚簇索引低。
以多个非主键列为排序规则建立的B+树称为联合索引,本质上也是一个二级索引。
MyISAM中将索引和数据分开存储,
数据文件
。这个文件无序,所以不能使用二分法进行查找。索引文件
中。以主键值+数据记录地址
的组合方式存储