非聚集索引
非聚集索引的数据存储在一个位置,索引存储在另一个位置索引带有指针指向数据存储位置,索引中的项目按索引值的顺序存储,而表中信息按另一种顺序存储。
非聚集索引与聚集索引具有相同的B-Tree 结构,但两个有重大区别:
数据行不按非聚集索引键的顺序排序和存储;
非聚集索引的叶层不包含数据页,相反,叶结点包含索引行。
有没有非聚集索引都不影响数据页的组织,因此每个表可以有多个非聚集索引,而不像聚集索引只能有一个。在SQL Server2005 中每个表可以创建非聚集索引最多为249个。
Ø 注意:由于非聚集索引使用索引页存储,因此它比聚集索引需要更多的存储空间,且检索效率较低。
数据库在搜索数据时,先对非聚集索引进行搜索,找到数据值在表中的位置,然后在该位置直接检索数据。这使得非聚集索引成为精确查询的最佳方法,因为索引包含了描述查询所搜索的数据值在表中的精确位置的条目。
要点:
以下数据类型不可用作非聚集索引的键:
ntext 、 text、 varchar(max) 、 nvarchar(max) 、 varbinary(max) 、xml 或 image
当用户需要用多种方法搜索数据时,非聚集索引很有用。如:用户可以频繁搜索园艺数据库来查找植物的俗名和学名。可以创建非聚集索引用于检索学名,创建聚集索引用于检索俗名。
考虑建索引的列
Ø 在经常需要搜索的列上;
Ø 在作为主键的列上;
Ø 在经常用在连接的列上;
Ø 在经常使用在WHERE子句中的列。
Ø 在经常需要排序的列上;
Ø 在经常需要根据范围进行搜索的列上;
不考虑建索引的列
Ø 对于那些在查询中很少使用或者参考的列;
Ø 对于那些只有很少唯一数据值的列;
Ø 对于那些定义为TEXT、NTEXT、IMAGE或BIT等数据类型的列;
Ø 当列的修改性能远远大于检索性能时。