你需要明白的SQL SERVER书签查找(Bookmark Lookup)
2013-03-12 16:08
417 查看
你也许会想,假如非聚集索引可以快速的找到所求的数据,但遗憾的是,非聚集索引却不包含所有所求列时该怎么办?这时SQL Server会面临两个选择,直接访问基本表去获取数据或是在非聚集索引中找到数据后,再去基本表获得非聚集索引没有覆盖到的所求列。这个选择取决于所估计的行数等统计信息。查询分析器会选择消耗比较少的那个。
一个简单的书签查找如图5所示。
![](http://images.cnblogs.com/cnblogs_com/CareySon/201205/201205232247071462.png)
图5.一个简单的书签查找
从图5可以看出,首先通过非聚集索引找到所求的行,但这个索引并不包含所有的列,因此还要额外去基本表中找到这些列,因此要进行键查找,如果基本表是以堆进行组织的,那么这个键查找(Key Lookup)就会变成RID查找(RID Lookup),键查找和RID查找统称为书签查找。
不过有时候索引查找所返回的行数过多导致书签查找的性能远不如直接进行扫描操作,因此SQL Server这时会选择扫描而不是书签查找。如图6所示。
![](http://images.cnblogs.com/cnblogs_com/CareySon/201205/2012052322471052.png)
图6.StateProvinceID列有非聚集索引,但由于返回行数过多,分析器会选择扫描而不是书签查找
一个简单的书签查找如图5所示。
![](http://images.cnblogs.com/cnblogs_com/CareySon/201205/201205232247071462.png)
图5.一个简单的书签查找
从图5可以看出,首先通过非聚集索引找到所求的行,但这个索引并不包含所有的列,因此还要额外去基本表中找到这些列,因此要进行键查找,如果基本表是以堆进行组织的,那么这个键查找(Key Lookup)就会变成RID查找(RID Lookup),键查找和RID查找统称为书签查找。
不过有时候索引查找所返回的行数过多导致书签查找的性能远不如直接进行扫描操作,因此SQL Server这时会选择扫描而不是书签查找。如图6所示。
![](http://images.cnblogs.com/cnblogs_com/CareySon/201205/2012052322471052.png)
图6.StateProvinceID列有非聚集索引,但由于返回行数过多,分析器会选择扫描而不是书签查找
相关文章推荐
- 你需要明白的SQL SERVER书签查找(Bookmark Lookup)
- 揭秘SQL Server 2000中的Bookmark Lookup--书签查找
- 揭秘SQL Server 2000中的Bookmark Lookup--书签查找
- 揭秘SQL Server 2000中的Bookmark Lookup--书签查找
- bookmark lookup(书签查找)
- SQL Server-聚焦移除Bookmark Lookup、RID Lookup、Key Lookup提高SQL查询性能
- Sql Server查询性能优化之不可小觑的书签查找
- Sql Server查询性能优化之不可小觑的书签查找
- SQL Server 2005技术内幕:查询、调整和优化2——Bookmark Lookup
- Sql Server查询性能优化之不可小觑的书签查找介绍
- 解析SQL Server聚焦移除(Bookmark Lookup、RID Lookup、Key Lookup)
- [转]Sql Server查询性能优化之不可小觑的书签查找
- Sql Server查询性能优化之不可小觑的书签查找
- Sql Server查询性能优化之不可小觑的书签查找
- Sql Server查询性能优化之不可小觑的书签查找
- SQL Server 索引 之 书签查找 <第十一篇>
- SQL SERVER 书签查找
- 你需要明白的SQL SERVER 隔离级别
- SQL Server书签查找
- SQL Server-聚焦移除Bookmark Lookup、RID Lookup、Key Lookup提高SQL查询性能(六)