索引的定义:

数据库索引实际与书籍目录类似,如果数据库表是一本书,那么通过索引时数据库查询程序无需扫描整个表而获取需要的信息。书的索引是相应内容的页码,而数据库索引是某个表中一列或者是若干列的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单,也就是提供指向库中指定数据的指针,然后根据指定的排序顺序对指针排序。实际利用特殊的数据结构(B树)加大查表的速度。

索引的分类:

  • 聚簇索引


实际上,汉语字典的正文本身就是聚簇索引,比如要查找字母‘a’开头的汉子只需要翻开字典的前几页进行查找,字典的后几页肯定没有,因为字典正文本身就是一个排序的目录。像这样正文内容本身就是一种某种规则排序的目录称为聚簇索引。

聚簇索引对磁盘上的实际数据重新组织已按照一个或多个列的值进行排序,其中表的物理顺序与索引顺序相同,所以一个表只有一个聚簇索引,与非聚簇索引相比,其能提供更快的访问速度,但是建立聚簇索引后更新索引列数据时,会导致表中物理顺序的变更,代价大,常用更新的数据不宜使用此索引方法。


  • 非聚簇索引


举个例子,有的汉字可能不认识并且不知道其发音,那只能按照其偏旁部首去查,例如‘张’对应的页码是610页,而张下面的弧是188页,上面的‘弟’位于94页,这种‘弟,张,弧’的排序在字典正文中却有不同的页码,查找时先找到目录中的结果,然后翻页找到所需的页码。这种目录纯粹是目录,正文是排序的方式称为非聚簇索引。


非聚簇索引不重新组织表中数据的顺序,而是通过对每一行数据存储索引列值并用一个指针指向数据所在的位置,显然一个表可以拥有多个非聚簇索引,每个非聚簇索引提供访问数据的不同排序方式。


  • 唯一索引


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



一个表可以建立一个或多个索引,提供多种存取路径,加快查找。索引的使用还是要和数据的用处有关。


索引是物理存储的路径概念,而不是逻辑概念,在执行一个查询时,系统会自动选择合适的索引作为数据存储路径。


create unique | clustered | nonclustered index <索引名>  

 
  
  on <表名>; 

 
 drop index <索引名>;