SQL SERVER的索引

SQL SERVER提供两种索引类型:聚集索引(clustered index)和非聚集索引(nonculustered index)
1.聚集索引
聚集索引确定表中数据的物理顺序。由于聚集索引规定数据在表中的物理存储顺序,因此一个表只能包含一个聚集索引。但该索引可以包含多个列(组合索引)

2.非聚集索引
非聚集索引和课本中的索引类似。数据存储在一个地方,索引存储在另一个地方,索引带有指针指向数据的存储位置。

使用索引
本例使用Northwind数据库的Customers表,字段CustomerID是主键,SQL SERVER默认创建主键时,创建聚集索引,字段CompanyName是非聚集索引,字段Country不是索引。在查询分析器里选中显示执行计划,查看执行情况。
1.使用聚集索引查询表

select * from Customers
where CustomerID='DRACD'

由Clustered Index Seek可以看出这里使用聚集索引查询表

2.使用非聚集索引查询表

select * from Customers
where CompanyName='Blondesddsl père et fils'

非聚集索引查询分两步,先是通过Index Seek查询索引

再通过Bookmark Lookup查找索引对应的数据行

3.不使用索引查询表

select * from Customers
where Country='China'

由于Customers表有聚集索引CustomerID,所以这里是Clustered Index Scan,如果表没有聚集索引,
就是Table Scan,Clustered Index Scan和Table Scan都是扫描整张表


聚集索引和非聚集索引的区别
在聚集索引中,叶子级不包括索引键和指针,它们就是数据本身。它们存储在索引的叶子级,并按索引键进行排序。
在非聚集索引中,叶子级存储一个指向数据行的指针(文件id,页id和页中的行id)。
这可以通过上面的执行计划看出,聚集索引只需要Clustered Index Seek就找到数据,而非聚集索引要先Index Seek查到索引,再Bookmark Lookup通过指针找到相应的数据。

posted on 2007-06-06 14:55  panda  阅读(300)  评论(0编辑  收藏  举报