亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

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

SQL Server數(shù)據(jù)庫(kù)中偽列及偽列的含義詳解

2024-08-31 01:05:06
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

SQL Server中的偽列

下午看QQ群有人在討論(非聚集)索引的存儲(chǔ),說(shuō),對(duì)于聚集索引表,非聚集索引存儲(chǔ)的是索引鍵值+聚集索引鍵值;對(duì)于非聚集索引表,索引存儲(chǔ)的是索引鍵值+RowId,這應(yīng)該是一個(gè)常識(shí),對(duì)此不作具體詳細(xì)闡述。

這里主要是提到的RowId引起了一點(diǎn)思考。

那么,這個(gè)RowId是個(gè)什么玩意?能不能更加直觀一點(diǎn)來(lái)看看RowId的信息?代表什么含義?這個(gè)當(dāng)然也是可以的。

Oracle中的表中有一個(gè)偽列的概念,就是在查詢(xún)表的時(shí)候加上select rowid,* from Table,會(huì)查詢(xún)出來(lái)偽列。

SQL Server中同樣有這么一個(gè)偽列,在SQL Server中,這個(gè)偽列可以認(rèn)為是數(shù)據(jù)行的物理地址,下面簡(jiǎn)單來(lái)觀察一下這個(gè)RowId以及RowId的含義。

偽列的測(cè)試

建一張簡(jiǎn)單的表,下面借助這個(gè)表來(lái)查看說(shuō)明偽列

CREATE TABLE Test( id int identity(1,1), name varchar(50))GOINSERT INTO Test VALUES (NEWID())GO 100

SQL Server中有一個(gè)未公開(kāi)的偽列“%%physloc%%”,也就是在查詢(xún)的時(shí)候,對(duì)于任何一張表,可以加上這個(gè)字段,比如如下,就可以查到表中每一行的偽列。

sqlserver,偽列,sql,server

這個(gè)偽列的類(lèi)型是binary(8) ,也就是有8個(gè)字節(jié),參考上圖的DATALENGTH(%%physloc%%) as Len,%%physloc%%返回的記錄的物理地址,其中前四個(gè)字節(jié)表示頁(yè)號(hào),中間兩個(gè)字節(jié)表示文件號(hào),最后兩個(gè)字節(jié)表示槽號(hào)
為了更加方便地觀察偽列的含義,sqlserver提供了一個(gè)未公開(kāi)的系統(tǒng)函數(shù)sys.fn_PhysLocFormatter,下面借助sys.fn_PhysLocFormatter這個(gè)函數(shù)來(lái)繼續(xù)觀察這個(gè)偽列

如下圖,這里就可以清晰地看到偽列中的信息了。

sqlserver,偽列,sql,server

比如第一行中的(1:73:0),上面說(shuō)了,其中前四個(gè)字節(jié)表示頁(yè)號(hào),中間兩個(gè)字節(jié)表示文件號(hào),最后兩個(gè)字節(jié)表示槽號(hào),(1:73:0)這種格式是經(jīng)過(guò)sys.fn_PhysLocFormatter格式化顯式之后的結(jié)果。

把文件號(hào)1放在最前面,中間的73是頁(yè)號(hào)(page number),最后一位0是槽號(hào)(sloc number)。

下面粗略地說(shuō)一下這幾個(gè)字段的含義。這里要求對(duì)SQL Server的存儲(chǔ)只是有一個(gè)基本的認(rèn)識(shí),否則看的云里霧里。

1,首先說(shuō)什么是文件號(hào)

如截圖,文件號(hào)就是數(shù)據(jù)庫(kù)的數(shù)據(jù)文件編號(hào),這里只有一個(gè)數(shù)據(jù)文件,文件編號(hào)為1,建表的時(shí)候默認(rèn)(這里也只能建立)建立在fileid = 1 的文件上面,fileid=2的是日志文件,就不多說(shuō)了。

sqlserver,偽列,sql,server

2,其次是頁(yè)號(hào),頁(yè)號(hào)就是分配給當(dāng)前這張表的數(shù)據(jù)頁(yè)面(8kb的最小分配單元)的頁(yè)號(hào),我們看一下Test這個(gè)表的頁(yè)面情況

借助DBCC IND命令,查詢(xún)分配給這個(gè)表的頁(yè)面信息,其中77號(hào)頁(yè)面是IMA也面,至于什么事IMA頁(yè)面,不多解釋。

73號(hào)頁(yè)面才是真正存儲(chǔ)數(shù)據(jù)的頁(yè),與上面的1:73:0中的73一樣,沒(méi)毛病。

  sqlserver,偽列,sql,server

3,最后看一下槽號(hào),槽號(hào)的概念要對(duì)SQL Server的數(shù)據(jù)頁(yè)面有一個(gè)基本的認(rèn)識(shí),這里盜用一張網(wǎng)友的圖。

所謂的槽號(hào)就是在數(shù)據(jù)頁(yè)面中,每個(gè)頁(yè)面存儲(chǔ)多行數(shù)據(jù),槽號(hào)用來(lái)標(biāo)記每一行數(shù)據(jù)的偏移量,用大白話說(shuō)就是“存儲(chǔ)每一行數(shù)據(jù)的地址空間開(kāi)始的位置”,因?yàn)槊恳恍袛?shù)據(jù)的總長(zhǎng)度是不一樣的(存在可變長(zhǎng)度列的情況下),每一行的占用的存儲(chǔ)空間也是不一樣的,槽號(hào)或者行偏移量就是說(shuō)明每一行數(shù)據(jù)在頁(yè)內(nèi)的開(kāi)始位置。

不過(guò)sys.fn_PhysLocFormatter格式化顯式的槽號(hào)并不是如下截圖的偏移量,而是第N個(gè)數(shù)據(jù)行的這個(gè)N的信息,因此第1行的槽號(hào)就是1,第2行的槽號(hào)就是2,以此類(lèi)推,當(dāng)?shù)谝粋€(gè)page存儲(chǔ)滿(mǎn)之后,從第二個(gè)page開(kāi)始存儲(chǔ),槽號(hào)又從0開(kāi)始編號(hào)且累加

  sqlserver,偽列,sql,server

  sqlserver,偽列,sql,server

至此,對(duì)SQL Server的偽列,也就說(shuō)經(jīng)常說(shuō)的RowId有了一個(gè)簡(jiǎn)單的認(rèn)識(shí)。

這里可以認(rèn)為,在SQL Server數(shù)據(jù)庫(kù)中,偽列RowId就是數(shù)據(jù)行的物理地址,至于別的數(shù)據(jù)庫(kù)中的偽列(RowId)是不是物理地址倒是不確定(很有可能也是的)

這里簡(jiǎn)單提一下一開(kāi)始說(shuō)的一個(gè)問(wèn)題:
為什么SQL Server的聚集表(有聚集索引的表)存儲(chǔ)數(shù)據(jù)的時(shí)候存儲(chǔ)的是“索引鍵值+聚集索引鍵值”,對(duì)于非聚集索引表,索引存儲(chǔ)的是索引鍵值+RowId?

或者反過(guò)來(lái)說(shuō),為什么聚集索引表的非聚集索引存儲(chǔ)的是“索引鍵值+聚集索引鍵值”而不是“索引存儲(chǔ)的是索引鍵值+RowId”

作為一個(gè)常識(shí),聚集索引要按照聚集索引的順序存放,這就意味著聚集索引表的行數(shù)據(jù)物理位置有可能發(fā)生變化,比如在眾所周知的“頁(yè)拆分(page split)”中發(fā)生變化,在數(shù)據(jù)行的物理位置發(fā)生了變化的時(shí)候,如果非聚集索引存儲(chǔ)的是索引鍵值+RowId,那么這個(gè)RowId也勢(shì)必要發(fā)生變化,這個(gè)變化當(dāng)然要耗費(fèi)一定的性能,為了防止此種情況的發(fā)生,聚集表中的非聚集索引存儲(chǔ)成相對(duì)不變的索引鍵值+聚集索引鍵值,因?yàn)樵跀?shù)據(jù)行的物理位置發(fā)生變化的時(shí)候,聚集索引鍵值是相對(duì)不變的,這一點(diǎn)也不難理解。

當(dāng)然有一種例外,當(dāng)對(duì)聚集索引表做更新的時(shí)候,直接更新聚集索引的鍵值,這樣的話,也有可能造成聚集索引表中當(dāng)前數(shù)據(jù)行的物理位置發(fā)生變化,這一點(diǎn)也比較有意思,就不展開(kāi)敘述了。

這一點(diǎn)跟繞口令一樣,這里要求對(duì)SQL Server中的聚集索引和非聚集索引,以及存儲(chǔ)結(jié)構(gòu)有一個(gè)基礎(chǔ)的認(rèn)識(shí)才容易理解。

最后高能預(yù)警

高能預(yù)警,別說(shuō)我瞎比比誤導(dǎo)人,上述解析偽列的函數(shù)sys.fn_PhysLocFormatter是一個(gè)未公開(kāi)的函數(shù),未公開(kāi)的函數(shù)就有可能潛在一些問(wèn)題,事實(shí)上這個(gè)函數(shù)有一個(gè)非常嚴(yán)重的bug。

該bug就是在解析物理存儲(chǔ)位置的時(shí)候有一定的邏輯錯(cuò)誤,這個(gè)問(wèn)題早有細(xì)心的人分析過(guò)了

目前測(cè)試來(lái)看,在SQL Server 2014中仍然存在bug,N前年啃書(shū)的時(shí)候就了解到有這么一個(gè)函數(shù),但是一直不想提及sys.fn_PhysLocFormatter這個(gè)函數(shù)的原因,因此對(duì)于未公開(kāi)的函數(shù),請(qǐng)不要做驗(yàn)證性測(cè)試,再次聲明:該函數(shù)有bug,請(qǐng)謹(jǐn)慎使用。

附上這個(gè)函數(shù)的源代碼,并參考原文的結(jié)論

create function sys.fn_PhysLocFormatter (@physical_locator binary (8)) returns varchar (128)as begin declare @page_id binary (4) declare @file_id binary (2) declare @slot_id binary (2) -- Page ID is the first four bytes, then 2 bytes of page ID, then 2 bytes of slot -- select @page_id = convert (binary (4), reverse (substring (@physical_locator, 1, 4))) select @file_id = convert (binary (2), reverse (substring (@physical_locator, 5, 2))) select @slot_id = convert (binary (2), reverse (substring (@physical_locator, 7, 2))) return '(' + cast (cast (@file_id as int) as varchar) + ':' + cast (cast (@page_id as int) as varchar) + ':' + cast (cast (@slot_id as int) as varchar) + ')' end

問(wèn)題出在reverse函數(shù)上。

reverse函數(shù)的作用是字符反轉(zhuǎn),而不是字節(jié)反轉(zhuǎn),當(dāng)遇到81-FE之間的字節(jié)時(shí),被認(rèn)為是雙字節(jié)字符而組合在一起參與反轉(zhuǎn)操作,造成了錯(cuò)誤。

總結(jié)

本文簡(jiǎn)單闡述了SQL Server中的偽列,以及偽列的含義,通過(guò)偽列對(duì)非聚集索引以及數(shù)據(jù)行的存儲(chǔ)結(jié)構(gòu)有一個(gè)簡(jiǎn)單的了解。

好了,以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來(lái)一定的幫助,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)VeVb武林網(wǎng)的支持。

 

注:相關(guān)教程知識(shí)閱讀請(qǐng)移步到MSSQL教程頻道。
發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
日本波多野结衣在线| 麻豆精品一区二区三区| 久久久久久国产精品美女| 中国一级特黄视频| 一区在线视频观看| www.国产二区| 1024成人网| 在线播放黄色网址| 在线播放免费av| av 一区二区三区| 亚洲精品成人久久久998| 人妻久久久一区二区三区| eeuss鲁丝片eeuss影院| 综合色中文字幕| 日本精品久久电影| 亚洲女人的天堂| 91亚洲成人| 神马午夜电影一区二区三区在线观看| 亚洲欧美日韩精品在线| 欧美性受xxxx黑人xyx性爽| 中国日韩欧美久久久久久久久| 国产欧美日韩在线| 盗摄牛牛av影视一区二区| 成人精品国产| 超碰免费公开在线| 欧美国产日韩亚洲一区| 黄上黄在线观看| 91xxxxx| 国产精品久久久久久久久免费高清| 成人高清免费| 日韩国产欧美在线播放| 午夜精品久久久久99热蜜桃导演| 欧美男男青年gay1069videost| 老司机凹凸av亚洲导航| 国产精品午夜一区二区欲梦| 91超碰这里只有精品国产| 久久久久久久香蕉网| 风间由美一区| 国产va在线| 99精品视频在线免费观看| 九九久久综合网站| 一个人www视频在线免费观看| 亚洲 国产 图片| 成人性色av| 国产精品福利网站| 国产精品一国产精品最新章节| 你微笑时很美电视剧整集高清不卡| 中文字幕av不卡| 成人免费观看在线观看| 亚洲自拍第三页| 四虎影院观看视频在线观看| www.66久久| 免费在线午夜视频| 成人网18免费网站| 国产乱码精品一区二三赶尸艳谈| 尤物99国产成人精品视频| 欧美变态凌虐bdsm| 国产一区二区h| 高清亚洲高清| 亚洲成人av片在线观看| 中文字幕日韩在线| 国产成人啪午夜精品网站男同| 视色,视色影院,视色影库,视色网| 激情五月五月婷婷| 欧美性另类69xxxx| 国产黄色高清在线| 天堂а在线中文在线无限看推荐| 97超碰在线免费| ass大特写| 五月激情综合| 黄色在线资源| 久久婷五月综合| 午夜精品久久久久久久99热影院| 午夜精品一区二区三区电影天堂| 国产无遮挡猛进猛出免费软件| 91网免费观看| a毛片在线免费观看| 爱爱视频免费在线观看| 久草这里只有精品视频| 国产精品主播在线观看| 国产精品久久影院| 久久人人妻人人人人妻性色av| 法国空姐在线观看免费| 成人拍拍拍在线观看| 尤物视频在线观看免费| 羞羞视频网站在线免费观看| 99国产牛牛视频在线网站| 欧美激情视频二区| 在线免费观看的av| 亚洲一级片av| 国产夫妻自拍一区| 五月天婷婷色综合| 免费欧美一级片| 精品久久久久久亚洲综合网站| 日本韩国欧美中文字幕| 高清精品视频| 欧美激情视频一区二区| 亚洲 小说区 图片区 都市| 亚洲在线免费| 国产91av视频| 欧美三级中文字幕| av免费看在线| 国产成人8x视频一区二区| 欧美日韩午夜剧场| 伊人午夜电影| 日本免费网站在线观看| 美女伦理水蜜桃4| www.亚洲人.com| 精品1区2区在线观看| 在线观看日韩片| 成人中文在线| 欧美天天在线| 4438x成人网全国最大| 国产传媒欧美日韩成人| 三级全黄视频| 日本黄xxxxxxxxx100| 91美女免费看| 中文字幕一区二区三区四区在线视频| 天堂电影院在线| 亚洲欧美一级二级三级| 日本三级网站在线观看| 精品一区二区久久| 国产精品100| 亚洲综合日韩在线| 亚洲第一区在线观看| 亚洲国产高清福利视频| 波多野结衣网站| 青青草社区视频| 久久精彩免费视频| 国产成人亚洲综合91| 欧美成人精品一区二区综合免费| 五月天久久777| 久久精品道一区二区三区| 久久深夜福利免费观看| 四虎影视在线观看2413| 黄色一级大片在线免费看国产| www.成人在线观看| 国产亚洲精品久久777777| 国产偷人爽久久久久久老妇app| 国产精品久久久久久一区二区| 欧美97人人模人人爽人人喊视频| 亚洲国产精品国自产拍av| 五月亚洲婷婷| 成人激情视频网站| 国产美女精品免费电影| 黄色国产在线播放| 性久久久久久久久久久| 国产精品免费在线| 欧美三级免费| 无码人妻久久一区二区三区不卡| 亚洲人成电影网| 91麻豆.com| 国产欧美日韩精品在线观看| dy888夜精品国产专区| 综合激情网...| 天天操天天爱天天干| 国产不卡av在线| 欧美日韩国产精选| 亚洲一区二区三区在线免费| 精品国产一区二| 日本wwwwwwwzzzzz视频| 久久美女免费视频| 精品免费国产一区二区| 另类中文字幕国产精品| 久久91成人| 在线观看国产精品91| 六月丁香久久丫| 亚洲五月综合| 国产天堂视频| 制服 丝袜 综合 日韩 欧美| 公肉吊粗大爽色翁浪妇视频| 亚洲一区视频在线播放| 成人av在线网站| 日本不卡高字幕在线2019| 欧美一级黄色片视频| 色综合久久中文综合久久牛| 91免费在线观看网站| 少妇熟女视频一区二区三区| 午夜精品在线| 视频在线观看入口黄最新永久免费国产| 欧美一级全黄| 91黄色免费网站| 日本一区二区乱| 91久久久一线二线三线品牌| 人妻无码中文久久久久专区| 日本免费无人高清| 免费在线视频一区| 免费看日韩av| 中文字幕在线一区免费| 精品视频在线导航| 亚洲人成777| 国产精品777777| 91伦理视频在线观看| 亚洲国产成人一区| 女生裸体无遮挡天堂网站免费| 亚洲欧美日韩国产中文在线| 国产成人免费看一级大黄| 在线免费播放av| 99这里有精品视频| 神马影院午夜我不卡影院| 久操国产精品| 深夜爽爽视频| 色xxx在线播放| 播放灌醉水嫩大学生国内精品| 亚洲精品乱码久久久久久金桔影视| ㊣最新国产の精品bt7086| 国产一区二区黑人欧美xxxx| 147欧美人体大胆444| 久久久久国产精品一区二区| 国产传媒在线播放| 亚洲欧美日韩中文播放| 亚洲国产欧美一区二区三区同亚洲| 免费精品视频一区| 国产片乱18免费| 久久久久久久久影视| 社区色欧美激情 | 国产麻豆视频一区二区| 中文字幕伦理免费在线视频| 日本三级黄色网址| 亚洲夜夜综合| 先锋影音欧美性受| 日韩欧美高清一区二区三区| 亚洲一区二区三区在线免费| 不卡中文字幕在线观看| 亚洲二区精品| 黄页网站视频在线观看| 交100部在线观看| www.蜜桃av.com| 久久久久久久国产精品毛片| 果冻天美麻豆一区二区国产| 日韩大片在线免费观看| 一二三四社区在线视频| 日本人妖在线| 日本韩国在线视频爽| 久久综合免费视频| 激情小视频网站| 亚洲欧美日韩久久| 99久久久无码国产精品性色戒| 丰满少妇乱子伦精品看片| 成人毛片视频网站| 国产美女三级视频| julia中文字幕久久亚洲蜜臀| 日韩精品一页| 岛国大片在线免费观看| 日本在线电影一区二区三区| 国产精品最新乱视频二区| 污色网站在线观看| 欧美日韩中文字幕在线视频| 都市激情亚洲| 日韩精品成人一区二区在线| 一区二区在线免费视频| 久久久久久久久久久一区| av网站大全在线| 最新欧美电影| 鲁丝一区二区三区| 六月婷婷色综合| 国产伦久视频在线观看| 亚洲精品成人在线播放| 美国一区二区| 精品一区二区三区在线播放| 久久青草精品视频免费观看| 国产无遮挡又黄又爽在线观看| 粉嫩av一区二区三区免费观看| 老牛影视av一区二区在线观看| 一区二区三区不卡在线| 天天躁日日躁狠狠躁免费麻豆| 久久99国产精品久久99果冻传媒| 久久久水蜜桃| 久久久久国产精品嫩草影院| 亚洲精品videosex极品| 成人国产亚洲精品a区天堂华泰| 国产亚洲精品久久久久久青梅| h精品动漫在线观看| 在线不卡一区二区三区| 亚洲人成电影在线播放| 天天亚洲美女在线视频| 精品人妻一区二区三区含羞草| 免费高清完整在线观看| 国产在线一区二区三区播放| 日本不卡一区二区三区高清视频| 成年人黄视频网站| 欧美精品一区二区三区蜜桃| 国产区在线观看视频| 日韩av综合中文字幕| 免费av一级电影| 国产女同无遮挡互慰高潮91| 中日韩美女免费视频网址在线观看| 日本成人中文字幕在线视频| 欧美三级成人观看| 中文字幕精品久久| 国产91对白刺激露脸在线观看| 7799国产精品久久久久99| 久久99国产精品久久99小说| 国产亚洲精品bv在线观看| 久草视频在线资源站| 美女黄色片网站| 97中文字幕在线观看| 伊人精品一区| 欧美高清www午色夜在线视频| 果冻天美麻豆一区二区国产| 国产精品综合一区二区| 一区二区高清视频| 国产精品成人免费精品自在线观看| sm捆绑调教国产免费网站在线观看| 日韩电影免费观看中文字幕| 日韩区欧美区| 毛片网站在线观看| 国内一区二区三区| 动漫成人在线| 全网国产福利在线播放| 中文字幕av一区中文字幕天堂| 91在线国产观看| 欧美伊人久久大香线蕉综合69| 日韩欧美二区| 国产免费一区二区三区在线观看| 极品白嫩丰满美女无套| 日韩手机在线视频| 久久黄色精品视频| 香蕉亚洲视频| 久久99中文字幕| 澳门黄色一级片| 北条麻妃在线| 国产精品久久久久久无人区| 九九热最新视频//这里只有精品| 热久久免费视频| 最新av免费在线| 国产精品一区二区在线看| 国产精品全国免费观看高清|