日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Sql Server之旅——第二站 理解讨厌的表扫描

發(fā)布時(shí)間:2023/12/4 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Sql Server之旅——第二站 理解讨厌的表扫描 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

很久以前我們在寫sql的時(shí)候,最怕的一件事情就是sql莫名奇妙的超級慢,慢的是幾根煙抽完,那個(gè)小球還在一直轉(zhuǎn)。。。這個(gè)著急也只有當(dāng)事人才明白,后來聽說有個(gè)什么“評估執(zhí)行計(jì)劃“,后來的后來才明白應(yīng)該避免表掃描。。。

一:表掃描

1.現(xiàn)象

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

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

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

二:深刻理解表掃描

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

這個(gè)學(xué)sqlserver的沒有理由說不知道,我們的記錄都是以數(shù)據(jù)頁形式存儲(chǔ)的,而且還應(yīng)該知道數(shù)據(jù)頁的大小是8k。。。。那數(shù)據(jù)頁在哪里?我可以讓你眼見為實(shí)。

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

<1>:dbcc ind 命令

你要是想看數(shù)據(jù)頁的相關(guān)情況,sqlserver還真提供了專用命令dbcc滿足你,你可能會(huì)問sqlserver中有提供ind命令的參數(shù)嗎?告訴你吧,還真有的,不過這個(gè)要開啟2588跟蹤,就像下面這樣。

<2>:PageFID,PagePID,IAMFID

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

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

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

從圖中可以看到,在數(shù)據(jù)頁的尾部是有很多槽位的,這些槽位指向了Data區(qū)域中一條條實(shí)際記錄的地址,所以說表掃描,其實(shí)就是掃這些Slot槽位,還是拿上面的Person表中的三條記錄來說,他們都是保存在78號數(shù)據(jù)頁中,現(xiàn)在出于好奇心把78號數(shù)據(jù)頁導(dǎo)出來,說干就干。。。。很簡單,你需要做兩件事情:

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

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

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

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

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

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

好了,到此為止吧。


網(wǎng)頁版請參見博客園:https://www.cnblogs.com/huangxincheng/p/4227483.html

總結(jié)

以上是生活随笔為你收集整理的Sql Server之旅——第二站 理解讨厌的表扫描的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。