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

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

本文旨在分类讲述执行计划中每一种操作的相关信息。

数据访问操作

首先最基本的操作就是访问数据。这既可以通过直接访问表,也可以通过访问索引来进行。表内数据的组织方式分为堆(Heap)和B树,其中表中没有建立聚集索引时数据是通过堆进行组织的,这个是无序的,表中建立聚集索引后和非聚集索引的数据都是以B树方式进行组织,这种方式数据是有序存储的。通常来说,非聚集索引仅仅包含整个表的部分列,对于过滤索引,还仅仅包含部分行。

除去数据的组织方式不同外,访问数据也分为两种方式,扫描(Scan)和查找(Seek),扫描是扫描整个结构的所有数据,而查找只是查找整个结构中的部分数据。因此可以看出,由于堆是无序的,所以不可能在堆上面进行查找(Seek)操作,而相对于B树的有序,使得在B树中进行查找成为可能。当针对一个以堆组织的表进行数据访问时,就会进行堆扫描,如图1所示。

图1.表扫描

可以看出,表扫描的图标很清晰的表明表扫描的性质,在一个无序组织表中从头到尾扫描一遍。

而对于B树结构的聚集索引和非聚集索引,同样可以进行扫描,通常来讲,为了获取索引表中的所有数据或是获得索引行树占了数据大多数使得扫描的成本小于查找时,会进行聚集索引扫描。如图2所示。

图2.聚集索引扫描

聚集索引扫描的图标也同样能够清晰的表明聚集索引扫描的性质,找到最左边的叶子节点后,依次扫描所有叶子节点,达到扫描整个结构的作用。当然对于非聚集索引也是同样的概念,如图3所示。

图3.非聚集索引的扫描

而对于仅仅选择B树结构中的部分数据,索引查找(Seek)使得B树变得有意义。根据所查找的关键值,可以使得从仅仅从B树根部向下走单一路径,因此免去了扫描不必要页的消耗,图4是查询计划中的一个索引查找。

图4.聚集索引查找

索引查找的图标也是很传神的,可以看到图标那根线从根节点一路向下到叶子节点。也就是找到所求数据所在的页,不难看出,如果我们需要查找多条数据且分散在不同的页中,这个查找操作需要重复执行很多回,当这个次数大到一定程度时,SQL Server会选择消耗比较低的索引扫描而不是再去重复索引查找。对于非聚集索引查找,概念是一样的,就不再上图片了。

标签:执行引擎
0
投稿

猜你喜欢

  • ACCESS数据库转换MYSQL数据库的软件

    2007-09-20 20:06:00
  • 菜鸟课堂:MySQL权限的详细解答

    2009-09-03 11:43:00
  • 关于Math.PI、前自增和后自增

    2009-05-25 12:38:00
  • PHP实现表单处理方法详解

    2023-05-25 07:39:18
  • 使用 JSON 进行数据传输

    2008-06-15 07:12:00
  • Access:数据转换问题

    2008-11-20 17:02:00
  • 打分进化史

    2009-12-24 12:20:00
  • 在SQL Server中处理空值时涉及的三个问题

    2009-02-05 15:30:00
  • 在Vista IIS 7 中用 vs2005 调试 Web 项目的注意事项

    2011-04-18 10:38:00
  • JavaScript table的排序类

    2008-10-06 12:56:00
  • 自动清空站点目录下所有文件

    2009-06-24 11:11:00
  • 如何用ASP发送HTML格式的邮件?

    2010-06-11 19:41:00
  • 你的网页“面目全非”过吗?

    2010-07-02 16:24:00
  • 怎样在MySQL数据库中导出整个数据库

    2008-12-31 15:13:00
  • 使用ASP订制自己的XML文件读写方法

    2008-10-24 09:35:00
  • 文字超长自动省略,以...代替,CSS实现

    2009-07-16 10:15:00
  • System.Data.OleDb.OleDbDataAdapter与System.Data.OleDb.OleDbDataReader的区别是什么?

    2009-10-29 12:17:00
  • 一个功能更强大的字符串格式化函数

    2008-04-30 17:44:00
  • textarea的输入限制统计代码statInput

    2008-05-22 13:36:00
  • SQL 外链接操作小结 inner join left join right join

    2008-03-12 11:56:00
  • asp之家 网络编程 m.aspxhome.com