深入理解SQLServer中的表扫描

很久以前我们写SQL的时候,有一件事是最怕SQL怪超慢,慢是一管滚回来,球照样转……这种焦虑才被主管人员理解,后来听说有执行计划的评估。后来,很明显,应该避免进行表扫描。

1:表扫描

1。现象

这张桌子的扫描很简单。这不是逐行扫描。如果你想说,如果你执行计划,我就去做。为了更充实,我将使用一个构建表并插入三行数据。





我没有对上面的人的索引,然后在哪里,看看表扫描是什么样的





事实上,我看到了邪恶手表扫描的三个字。既然我们是邪恶的东西,我们必须对它有深刻的理解。那么我们就可以思考如何避免它,所以我们必须了解本质,问题,它是如何席卷的你怎么把它弄坏的这也必须从数据页面上说。

二:深入了解表扫描

1:数据页

没有理由为不知道我们的记录被存储在数据页的形式,我们应该知道,数据页的大小为8K。哪里是数据页我可以

让你看到真相。



乍一看,我看到了很多绘画,不要害怕,不要想更多的画,想得很高。

:DBCC IND命令

如果你想看到相关的数据页,SQLServer真的提供了一个特殊的命令DBCC来满足你。你可能会问,如果有一个参数在SQLServer提供股份的命令。告诉你,这是真的。

是的,但是这将打开2588跟踪,如下所示。



PageFID,PagePID,iamfid

我只想说,有许多种类的数据页面,默认是说表的数据页,还有我的数据页,没有什么奇怪的,我是用来跟踪数据页,所以上面的数字为零的记录,iamfid场IAM页,下面PagePID = 78,是表中的数据页。

2。查看数据页

为了避免混淆,我想先从数据页的内部结构的概念开始,这样我们就可以给整个印象。



从图中可以看到,在数据页的结尾处有许多槽位置。这些槽指向数据区域中的实际记录地址,所以表扫描实际上是扫描这些槽槽。

或者把上面的人表中的三个记录保存在78个数据页中,现在出于好奇,他们可以引导78个数据页面来完成这项工作,非常简单。你需要它

两件事要做:

3604跟踪:DBCC TRACEON(3604)

使用DBCC页命令出口数量78数据页(pagefid:pagepid)=(1:78)下面的1号文件,如下。

头数据(页眉):



数据内容(页面数据):



数据槽(页槽):





你看到三槽以上(0,1,2),并且都有相应的偏移地址(0×7e,0x92,0xba),其中涉及的数据区的实际地址。

好了,到目前为止,你不能再说下去了,洗洗睡吧。