SQLServer索引类型

来源:互联网 发布:趣行天下北京网络 编辑:程序博客网 时间:2024/05/16 09:01

     在SQLServer数据库中支持两种基本类型的索引,那就是是簇索引和非簇索引。在这两种基本类型的索引之上你可以增加得到一个唯一索引的功能,该索引迫使所有插入索引中的值都必须保持唯一。下面来看这些索引的详细介绍。如下:


一、簇索引


簇索引是一种特殊索引,它使数据按照索引的排序顺序存放表中。簇索引类似于字典,即所有词条在字典中都以字母顺序排列。簇索引实际上重组了表中的数据,所以你只能在表中建立一个簇索引。


当数据按值的范围查询时,簇索引就显得特别有用。因为所有SQLServer都必需先找到所查询范围的第一行,然后依次下去,直到该范围的最后一个值找到为止,并且保证了所有其他值也落在这个范围内。举一个例子,一个应用程序要查找首字母位于G和P之间的姓名列表,SQLServer首先找到以字母G开头的名字,取出所有记录,直到找到以字母P开头的名字为止,这种方法使得查询过程非常高效。


当你准备在表中创建簇索引时必须考虑到以下几点:


•你应该在尽可能少的列上定义一个簇索引。在表中创建的任何其他的索引都比正常的要大,因为它们不仅包含其他索引的值,而且还包含簇索引的关键字。


•进行大量数据改动的表不适宜用簇索引,因为SQLServer将不得不在表中维护行的次序。


•如果访问表经常是为了返回一大堆数据,应该考虑使用簇索引。


•如果要索引的值极少,例如一个列包含的全都是1和0,创建簇索引就不是个好主意。


•如果表经常由一个指定的列来排序,该列将是簇索引的最佳候选列。这是因为表中的数据已经为你排好序了。
 

•如果访问一个表并使用BETWEEN、<、>、>=或<=操作符来返回一个范围的值时,应该考虑使用簇索引。


•当列具有相对数量较少的相异值时,比如世界上国家的名称,创建簇索引应该说是个好主意。


•如果表中的值是按照顺序访问的,应该考虑使用簇索引。


•对于追求快速的应用程序,搜索用的那个列是簇索引的最佳候选列。


二、非簇索引


非簇索引中的数据顺序不同于表中的数据存放顺序。这种类型的索引类似于课本里的索引。表里的数据存放无任何顺序,而该索引仅有一个按关键字的排序值和一个指向对应数据的指针,犹如页码一样。SQLServer使用这种索引的方法,就像你使用课本里的索引一样。


当要查寻某个特定值时,只需找到关键字的值,然后再到表中从索引指定的地方检索出数据。


如果表包含一个簇索引,索引指针实际上指向的是簇索引的关键字。如果表中没有簇索引,索引指针则指向行标识(即RID)。


非簇索引的一大优点是可以在同一个表中创建多个非簇索引。这样在以几种不同的方式访问表时,就可以根据这几种访问方式在表中创建不同的索引。当你准备在表中创建非簇索引时,必须考虑到以下几点:


•当应用程序要求通过大量的连结来创建结果集时,应该考虑使用高度索引的表。


•当列包括大量唯一的值时,如姓名或地址,此时可以在表中建立簇索引。


•当查询不返回大量数据时最适合于非簇索引。


•同簇索引一样,如果列中包含的相异值极少,比如仅有0和1,就没有必要建立索引。


可以在一个表中对多个列创建索引,这些索引称为复合索引。当用户在SELECT语句的WHERE子句下使用多个列时,这些索引就显得特别有用。举例来说,用户通常要查寻作者住在哪个州哪个城市,这时就要对这两个列创建一个索引。


三、唯一索引


你不能单独创建一个唯一索引,唯一索引是作为簇索引或非簇索引的一部分而创建的。唯一索引用来保证索引数据的唯一性。如果创建的索引包含多个列,唯一索引将保证包含在索引中的所有值的组合是唯一的。应用唯一索引的一个例子是包含社会保险号码的列,这个列是最适合于创建唯一索引,因为在理论上,没有两个人拥有同样的社会保险号码。另一方面,名和姓的组合不适合于创建唯一索引,因为这样你就不可能在表中存放同名同姓的人了。


当你在表中创建UNIQUE或PRIMARYKEY约束后,SQLServer将会在表中自动生成一个唯一索引。