程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> 其他數據庫知識 >> MSSQL >> 深刻懂得Sql Server中的表掃描

深刻懂得Sql Server中的表掃描

編輯:MSSQL

深刻懂得Sql Server中的表掃描。本站提示廣大學習愛好者:(深刻懂得Sql Server中的表掃描)文章只能為提供參考,不一定能成為您想要的結果。以下是深刻懂得Sql Server中的表掃描正文


  良久之前我們在寫sql的時刻,最怕的一件工作就是sql莫名奧妙的超等慢,慢的是撸一管子回來,誰人小球還在一向轉。。。這個焦急也只要當事人才網job.vhao.net明確,後來據說有個甚麼“評價履行籌劃“,後來的後來才明確應當防止表掃描。。。

一:表掃描

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的,就是表數據頁。

 2.檢查數據頁

  為防止年夜家懵懂了,我先照樣說說數據頁外部構造年夜概是個甚麼模樣,好讓年夜家有個全體印象。

 從圖中可以看到,在數據頁的尾部是有許多槽位的,這些槽位指向了Data區域中一條條現實記載的地址,所以說表掃描,其實就是掃這些Slot槽位,

照樣拿下面的Person表中的三筆記錄來講,他們都是保留在78號數據頁中,如今出於獵奇心把78號數據頁導出來,說干就干。。。。很簡略,你需

要做兩件工作:

<1>開啟3604跟蹤: dbcc traceon(3604)

<2>應用dbcc page 敕令導出1號文件上面的78號數據頁(pageFID:pagePID)=(1:78),就像上面如許。。。

 數據頁頭(PAGE HEADER):

 

數據內容(Page Data): 

 

數據槽位(Page Slot):

 

 

有無看到下面(0,1,2)三個槽位,而且都有響應的偏移地址(0x7e,0x92,0xba),這個地址就指向了Data區域現實記載的偏移地址。

好了,到此為止吧,不克不及再往下說了,洗洗睡了。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved