KimhillZhang  

索引:索引是与表或视图的页的集合,用于加速从表中检索行或用于强制实施唯一性。

聚集索引:通过物理上的顺序进行排列而建立的索引。

非聚集索引:通过索引表(相当于书的目录)的方法建立的索引。

SQL数据访问方式:一是:表扫描;二是:使用索引。

聚集索引可以看作是英文字典,字典从a-z排序,当我们需要查找某个单词时,如:student,这时就可

以定位到是字典的后半部分。

非聚集索引可以看作是书的目录,通过目录标明某文章在哪一页就定位到哪一页。

由于聚集索引确定了实现存储表行的顺序,所以每个表只能有一个聚集索引,表中的行不能以多种顺序

存储。

数据类型:ntext text varchar(max) nvarchar(max) varbinary(max) xml image不可用作聚集索引,

非聚集索引的键。

使用聚集索引场合:
1、使用between, >, >=, <, <=之类的运算符返回一系列值。
2、返回使用order by 或 group by 子句排序的数据。
3、返回使用join子句合并的数据,一般是外键列
4、返回大型结果集

如果索引表有聚集索引,则聚集索引中定义的一列或多列将自动追加到表上每一个非聚集索引的最后,

这样无需在非聚集索引的定义中指定聚集索引列即可生成覆盖查询。如:表有C列的聚集索引,则B列和A

列的非聚集索引将以BAC列作为其键值。

使用非聚集索引的场合:
1、当用户需要以多种方式搜索数据时,如:用户可能频繁搜索学号,姓名。可创建非聚集索引为姓名s

,聚集索引为学号
2、如果你表已经有了聚集索引,并且你需要索引另一个列,这时只能选择使用非聚集索引。
3、当索引包含查询中的所有列时,你将能最大限度地提高性能,覆盖范围是指查询中所涉及的索引能

支持的列数。
4、你希望使用join, group by子句提高查询性能,应用对连接,分组操作的列创建多个非聚集索引,

并对所有的外键创建聚集索引。
5、表更新频率较低,但是包含大量数据。
6、不会返回大量结果。
7、需要对包含多个不同值(如姓和名)的列进行索引。非聚集索引最适合于数据选择性从高度可选到

唯一的列。

posted on 2012-04-13 09:10  KimhillZhang  阅读(408)  评论(1编辑  收藏  举报