作名词来讲,索引是一种特殊的文件,包含着对数据表中所有记录的引用指针。可以对表中的一列或者多列创建索引,并且指定所以的类型,各类索引有各自的数据结构实现。
作动词来讲,索引是一种利用某种规则的数据结构与实际的数据关系加快数据查找的功能。索引数据节点中有着实际文件的位置,原因是索引是根据特定的规则和算法构建的。
在查找的时候遵循索引的规则可以快速查找对应数据的节点,从而达到快速查找数据的效果。
其实宏观来讲,索引是具体的某项技术,在生活中索引的使用无处不在,比如说,书本中的目录,读书时的座位号,考试编号等等。只要是通过特定结构能够加快查找效率基本上就可以算是索引。
帮助快速定位、检索数据。
数据量较大,且经常对这些列进行条件查询
该数据库表的插入操作,及对这些列的修改操作频率较低。
不适用的情景:
说明:
语法:show index from 表名;
语法:create index 索引名 on 表名(字段名);
语法:drop index 索引名 on 表名;
不同的数据库,不同的引擎,里边存储数据的结构还有差异。这里我们介绍的是mysql中索引背后的数据结构——B+树。
B+树是一种平衡的多路搜索树。
相较于B树,B+树有一点区别就是会重复出现元素,这样的重复有什么意义呢?
答:这样的重复出现,使得叶子结点就包含了所有数据的全集。
所有非叶子结点中的值都会在叶子结点中体现出来。
索引的分类标准不同,分类的结果自然而然也不同。这里我们主要按照数据库功能分类。
定义:唯一索引限制了在表对应的唯一索引列上的值是唯一不可重复的。
特点:
定义:主键索引属于唯一索引的一个特殊种类,一个表的某列创建了主键索引后会具备唯一索引的功能同时还会对该列生成主键约束,所以简单来说主键索引是一种带有主键约束的唯一索引。
特点:
数据库在创建主键同时会自动建立一个唯一索引
每个表最多只能创建一个主键索引
创建了主键索引的列不允许有重复的值,并且不能为null值
创建了主键索引的列可以作为外键
定义:聚集索引属于聚簇索引的一个种类,在mysql中InnoDB数据引擎模式主索引就是使用的聚集索引,聚集索引的索引结构中就包含了表的数据。
特点:
(1)在Mysql中索引是基于B+树的数据结构实现的;
(2)MyISAM数据引擎,表索引文件和数据文件是分离开的,主索引和辅助索引一样,只是有主键的区别,主索引的键不能重复;InnoDB中表索引本身就是表数据文件,索引节点中存的是表的数据而不是数据引用地址,辅索引完全依赖于主索引,辅索引的每次查找都是找到对应主索引的节点再找到数据;
(3)InnoDB中必须要有一个聚集索引,而聚集索引在基于主键创建的,所以InnoDB的表必须要有主键,如果没有显示指定主键,Mysql会自动创建一个隐式主键;
(4)InnoDB除了主索引(聚集索引)之外的索引都是以辅助索引的形式存在,辅助索引每次检索的时候是通过找到主索引再找到数据;
参考1
参考2
下一篇:mysql入门练习