深入理解Sql Server中的表扫描


本文整理自网络,侵删。

  很久以前我们在写sql的时候,最怕的一件事情就是sql莫名奇妙的超级慢,慢的是撸一管子回来,那个小球还在一直转。。。这个着急也只有当事人才明白,后来听说有个什么“评估执行计划“,后来的后来才明白应该避免表扫描。。。

一:表扫描

1.现象

  ”表扫描“听起来很简单,不就是一行一行的扫嘛,你要说”执行计划”的话,我也会玩,为了更可观,我build一个表,再插入三行数据,如下图:

 

上面的Person我是一个索引都没建,然后where一下,看看表扫描是啥样的???

 

 

   果然是看到了万恶的“表扫描”三个字,既然是万恶的东西,我们一定要深刻了解下,然后我们才可以怎么去想办法避免它。。。所以我们一定要理解到本质,那问题来了,它到底是怎么扫的呢???怎么破呢?这个还必须得从数据页说起。。。

 二: 深刻理解表扫描

1:数据页

    这个学sqlserver的没有理由说不知道,我们的记录都是以数据页形式存储的,而且还应该知道数据页的大小是8k。。。。那数据页在哪里?我可以

让你眼见为实。

乍一看我画了好多,千万不要怕,不要以为画的多,就以为高深了。。。我简单的剖析下。

<1>:dbcc ind 命令

 你要是想看数据页的相关情况,sqlserver还真提供了专用命令dbcc 满足你,你可能会问sqlserver中有提供ind命令的参数吗?告诉你吧,还真有

的,不过这个要开启2588跟踪,就像下面这样。

  <2>:PageFID,PagePID,IAMFID

  刚才也说了,数据页有很多种,默认说的都是表数据页,其实还有IAM数据页,没什么稀奇的,IAM就是用来跟踪表数据页的,所以上面的图中,IAMFID字段为Null的记录就是IAM页,下面的PagePID=78的,就是表数据页。

阅读剩余部分

相关阅读 >>

mysql缓存的查询和清除命令使用详解

oracle dba常用语句第22页

oracle plsql中异常高级特性示例解析

利用jdbc的preparestatement打印真实sql的方法详解

navicat如何连接sqlserver数据库

sqlserver convert()函数用法小结

sql server简单查询示例汇总

sql语句修改数据

mysql left join优化(10秒优化到20毫秒内)

sql server是什么意思

更多相关阅读请进入《sql》频道 >>


数据库系统概念 第6版
书籍

数据库系统概念 第6版

机械工业出版社

本书主要讲述了数据模型、基于对象的数据库和XML、数据存储和查询、事务管理、体系结构等方面的内容。



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...