概念

索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息。

简单的说:
书的目录,根据目录对应的页码可以迅速找到对应章节(但是具体原理并不是这么简单)

建表原理

B+tree平衡树是数据表默认的索引数据结构,创建表的时候必须设定主键,主键就会把表在磁盘上的存储结构由整齐排列变成树状结构,也就是整个表,变成了一个索引,也就是聚集索引。

索引种类

1.唯一索引:不允许任何两列具有相同索引值的索引
2.主键索引:是唯一索引的特定类型,该索引要求主键的每个值都唯一
3.聚集索引:表中行的物理顺序与键值的逻辑顺序相同,一个表只能包含一个聚集索引

聚簇索引
实际上,汉语字典的正文本身就是聚簇索引,比如要查找字母‘a’开头的汉子只需要翻开字典的前几页进行查找,字典的后几页肯定没有,因为字典正文本身就是一个排序的目录。像这样正文内容本身就是一种某种规则排序的目录称为聚簇索引。
聚簇索引对磁盘上的实际数据重新组织已按照一个或多个列的值进行排序,其中表的物理顺序与索引顺序相同,所以一个表只有一个聚簇索引,与非聚簇索引相比,其能提供更快的访问速度,但是建立聚簇索引后更新索引列数据时,会导致表中物理顺序的变更,代价大,常用更新的数据不宜使用此索引方法。

非聚簇索引
举个例子,有的汉字可能不认识并且不知道其发音,那只能按照其偏旁部首去查,例如‘张’对应的页码是610页,而张下面的弧是188页,上面的‘弟’位于94页,这种‘弟,张,弧’的排序在字典正文中却有不同的页码,查找时先找到目录中的结果,然后翻页找到所需的页码。这种目录纯粹是目录,正文是排序的方式称为非聚簇索引。
非聚簇索引不重新组织表中数据的顺序,而是通过对每一行数据存储索引列值并用一个指针指向数据所在的位置,显然一个表可以拥有多个非聚簇索引,每个非聚簇索引提供访问数据的不同排序方式。

唯一索引
唯一索引是不允许其中任何两行具有相同索引值的索引。当数据库中存在重复的键值时,大多数数据库不允许将新创建的唯一索引与表一起保存。

一个表可以建立一个或多个索引,提供多种存取路径,加快查找。索引的使用还是要和数据的用处有关。
索引是物理存储的路径概念,而不是逻辑概念,在执行一个查询时,系统会自动选择合适的索引作为数据存储路径。

—–聚集索引:这样我们可以看到主键既是唯一索引也是主键索引和聚集索引,当查询id的时候直接从平衡树的最顶端开始搜索,搜索次数就是对数函数,这样大大提高了效率。但是对于增加数据同时要添加索引,占用物理空间,每次增加后调整平衡树平衡,动态维护索引,降低了数据的维护速度。

索引优缺点

优点:
1.避免进行数据库全表的扫描。
2.聚集索引可以避免数据插入操作,集中于表的最后一个数据页面。
3.在某些情况下,索引可以避免排序操作。

缺点:
1.创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增加。
2.索引需要占物理空间,除了数据表占数据空间之外,每一个索引还要占一定的物理空间。
3.当对表中的数据进行增删改时,索引也要动态的维护,这样就降低了数据的维护速度。

创建方式:

create unique | clustered | nonclustered index <索引名> on <表名>;

删除方式:

drop index <索引名>;