国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數(shù)據(jù)庫 > SQL Server > 正文

深入理解Sql Server中的表掃描

2020-07-25 12:53:53
字體:
來源:轉載
供稿:網友

  很久以前我們在寫sql的時候,最怕的一件事情就是sql莫名奇妙的超級慢,慢的是擼一管子回來,那個小球還在一直轉。。。這個著急也只有當事人才明白,后來聽說有個什么“評估執(zhí)行計劃“,后來的后來才明白應該避免表掃描。。。

一:表掃描

1.現(xiàn)象

  ”表掃描“聽起來很簡單,不就是一行一行的掃嘛,你要說”執(zhí)行計劃”的話,我也會玩,為了更可觀,我build一個表,再插入三行數(shù)據(jù),如下圖:

 

上面的Person我是一個索引都沒建,然后where一下,看看表掃描是啥樣的???

 

 

   果然是看到了萬惡的“表掃描”三個字,既然是萬惡的東西,我們一定要深刻了解下,然后我們才可以怎么去想辦法避免它。。。所以我們一定要理解到本質,那問題來了,它到底是怎么掃的呢???怎么破呢?這個還必須得從數(shù)據(jù)頁說起。。。

 二: 深刻理解表掃描

1:數(shù)據(jù)頁

    這個學sqlserver的沒有理由說不知道,我們的記錄都是以數(shù)據(jù)頁形式存儲的,而且還應該知道數(shù)據(jù)頁的大小是8k。。。。那數(shù)據(jù)頁在哪里?我可以

讓你眼見為實。

乍一看我畫了好多,千萬不要怕,不要以為畫的多,就以為高深了。。。我簡單的剖析下。

<1>:dbcc ind 命令

 你要是想看數(shù)據(jù)頁的相關情況,sqlserver還真提供了專用命令dbcc 滿足你,你可能會問sqlserver中有提供ind命令的參數(shù)嗎?告訴你吧,還真有

的,不過這個要開啟2588跟蹤,就像下面這樣。

  <2>:PageFID,PagePID,IAMFID

  剛才也說了,數(shù)據(jù)頁有很多種,默認說的都是表數(shù)據(jù)頁,其實還有IAM數(shù)據(jù)頁,沒什么稀奇的,IAM就是用來跟蹤表數(shù)據(jù)頁的,所以上面的圖中,IAMFID字段為Null的記錄就是IAM頁,下面的PagePID=78的,就是表數(shù)據(jù)頁。

 2.查看數(shù)據(jù)頁

  為避免大家糊涂了,我先還是說說數(shù)據(jù)頁內部結構大概是個什么樣子,好讓大家有個整體印象。

 從圖中可以看到,在數(shù)據(jù)頁的尾部是有很多槽位的,這些槽位指向了Data區(qū)域中一條條實際記錄的地址,所以說表掃描,其實就是掃這些Slot槽位,

還是拿上面的Person表中的三條記錄來說,他們都是保存在78號數(shù)據(jù)頁中,現(xiàn)在出于好奇心把78號數(shù)據(jù)頁導出來,說干就干。。。。很簡單,你需

要做兩件事情:

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

<2>使用dbcc page 命令導出1號文件下面的78號數(shù)據(jù)頁(pageFID:pagePID)=(1:78),就像下面這樣。。。

 數(shù)據(jù)頁頭(PAGE HEADER):

 

數(shù)據(jù)內容(Page Data): 

 

數(shù)據(jù)槽位(Page Slot):

 

 

有沒有看到上面(0,1,2)三個槽位,并且都有相應的偏移地址(0x7e,0x92,0xba),這個地址就指向了Data區(qū)域實際記錄的偏移地址。

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

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 九江县| 贞丰县| 武隆县| 晋江市| 吉林市| 嘉义县| 乌鲁木齐县| 丹巴县| 德惠市| 沁水县| 曲水县| 巴林右旗| 上虞市| 化隆| 中山市| 余干县| 乌拉特前旗| 吴江市| 信宜市| 吉木萨尔县| 清涧县| 永宁县| 汪清县| 沾化县| 乡城县| 贵阳市| 汉阴县| 清河县| 武清区| 桂东县| 沽源县| 封丘县| 延吉市| 海门市| 龙门县| 吉木萨尔县| 余干县| 平塘县| 江都市| 九寨沟县| 团风县|