SQL Server中的执行引擎入门 图解(2)

来源:asp之家 时间:2012-06-06 20:08:26 

书签查找(Bookmark Lookup)

你也许会想,假如非聚集索引可以快速的找到所求的数据,但遗憾的是,非聚集索引却不包含所有所求列时该怎么办?这时SQL Server会面临两个选择,直接访问基本表去获取数据或是在非聚集索引中找到数据后,再去基本表获得非聚集索引没有覆盖到的所求列。这个选择取决于所估计的行数等统计信息。查询分析器会选择消耗比较少的那个。

一个简单的书签查找如图5所示。

图5.一个简单的书签查找

从图5可以看出,首先通过非聚集索引找到所求的行,但这个索引并不包含所有的列,因此还要额外去基本表中找到这些列,因此要进行键查找,如果基本表是以堆进行组织的,那么这个键查找(Key Lookup)就会变成RID查找(RID Lookup),键查找和RID查找统称为书签查找。

不过有时候索引查找所返回的行数过多导致书签查找的性能远不如直接进行扫描操作,因此SQL Server这时会选择扫描而不是书签查找。如图6所示。

图6.StateProvinceID列有非聚集索引,但由于返回行数过多,分析器会选择扫描而不是书签查找

这个估计是根据统计信息进行的,关于统计信息,可以看我之前的一篇博文:浅谈SQL Server中统计对于查询的影响

聚合操作(Aggregation)

聚合函数会导致聚合操作。聚合函数是将一个集合的数据按照某种规则汇总成1个数据,或基于分组按照规则汇总成多个数据的过程。一些聚合函数比如:avg,sum,min,另外还有distinct关键字都有可能导致两类聚合操作:流聚合(Stream Aggregation)和哈希聚合(Hash Aggregation)。

标签:执行引擎
0
投稿

猜你喜欢

  • 详解RIFF和WAVE音频文件格式

    2023-03-30 15:58:13
  • Python异步处理返回进度——使用Flask实现进度条

    2023-10-19 23:23:08
  • 详解python调度框架APScheduler使用

    2021-11-05 22:55:36
  • ASP+SQL Server构建网页防火墙

    2009-01-21 19:56:00
  • 如何从零开始利用js手写一个Promise库详解

    2024-04-19 10:46:32
  • Innodb表select查询顺序

    2024-01-16 03:32:40
  • MySql安装启动两种方法教程详解

    2024-01-16 11:32:53
  • Python input函数使用实例解析

    2022-01-05 21:00:34
  • Python函数式编程的用法详解

    2021-12-21 16:16:15
  • python字典一键多值实例代码分享

    2021-07-08 10:47:52
  • sklearn-SVC实现与类参数详解

    2023-09-04 18:10:43
  • GridView自定义分页的四种存储过程

    2024-01-27 09:52:25
  • 详解Python如何查看一个函数的参数

    2023-05-13 19:24:19
  • Go语言Goroutinue和管道效率详解

    2024-02-02 18:19:09
  • 揭秘SQL Server 2008性能和可扩展性

    2009-03-10 14:47:00
  • python爬虫获取淘宝天猫商品详细参数

    2021-06-08 09:27:29
  • 细化解析:Mysql数据库对文件操作的封装

    2008-11-27 16:32:00
  • Python简单实现词云图代码及步骤解析

    2021-05-13 00:25:52
  • JavaScript 页面编码与浏览器类型判断代码

    2024-04-08 10:54:03
  • 将MySQL 5.0下的数据导入到MySQL 3.23中

    2009-01-04 13:02:00
  • asp之家 网络编程 m.aspxhome.com