SQL SERVER大話儲存結構(1)_資料頁型別及頁面指令分析
1 資料頁的型別
不同型別的資料,儲存在不同型別的頁面裡,大致可以分為3個方向:儲存實際資料的、儲存管理資料頁資料的及儲存備份相關的資料,這3個反向,又各有不同的page type。詳見下表。Id | User_for | Page Type | Page Name | Description |
1 | 實際資料 | 資料頁 | Data Page | 堆表或者聚集索引的葉子節點 |
2 | 索引頁 | Index Page | 聚集索引的分支節點或者非聚集索引 | |
3 | LOB | LOB | 用來存放大型物件資料型別:text , image ,varchar(max) , varbinary(max)等 | |
4 | 行溢位頁 | Row Overflow Page | 只能儲存單一text或者image列資料塊 | |
5 | 管理資料頁資料 | GAM頁 | Global Allocation Map | 管理統一區的點陣圖 |
6 | SGAM頁 | Shared Global Allocation Map | 管理混合區的點陣圖 | |
7 | IAM頁 | Index Allocation Map | 分配單元分配到的區 | |
8 | PFS頁 | Page Free Space | 可用空間 | |
9 | 備份相關的資料 | DCM頁 | Differential Changed Map | 自最後一條backup database 語句之後更改的區的資訊 |
10 | BCM頁 | Bulk Changed Map | 自最後一條backup log語句之後的大容量操作所修改的區的資訊 |
1.1 PFS
PFS頁,用來跟蹤頁分配級別,儲存當前資料檔案裡所有頁分配及可用空間的資訊- bit 0-2位,描述該頁還有多少空閒空間
- 0x00 is empty
- 0x01 is 1 to 50% full
- 0x02 is 51 to 80% full
- 0x03 is 81 to 95% full
- 0x04 is 96 to 100% full
- bit 4 (0x10): 是否是IAM頁?
- bit 5 (0x20): 是否是混合頁?
- bit 6 (0x40): 是否已分配使用?
- Bit 7 保留,未使用,無實際含義
1.2 GAM & SGAM
SQL SERVER的區分為兩種型別:混合區(uniform extent)跟統一區(mixed extent)。 混合區,指區內連續的8個數據頁,分別分配給不同的資料庫物件儲存使用,這有利於小表在使用的過程中,沒有一下子就佔據了一個區,而是先從混合區使用,合理分配空間;統一區,指的是區內連續8個頁都是用來儲存同一個資料物件的,當一個表格分配了8個混合區頁後,會開始分配使用統一區,避免資料分散儲存在各個不連續的資料頁中。1.2.1 GAM
GAM頁,用來跟蹤區的分配情況,描述每區是否被分配,每個區用1bit標識其分配情況。一個GAM頁8k,一共有8k*8 bit,也就是差不多可以標識 64000個區,約 8k*8bit*(8*8k)=4G 空間,所以,大概每隔 4G空間左右,就有一個GAM頁來標識下一個4G的空間分配情況。- Bit=1,標識當前的區是空閒的,可以用來分配;
- Bit=0,標識當前的區以及被資料使用。
1.2.2 SGAM
SGAM頁,用來跟蹤區的分配情況,描述哪些區是混合區並且至少有一個空閒的資料頁。1bit描述一個區,1表示該區是混合區且至少有一個空閒的資料頁,代表該區可以分配給需要使用混合區的物件。 SQL Server通過讀取SGAM頁來找到與可用空間混合的範圍來把空間分配給小物件。單個SGAM頁能夠追蹤4GB的空間,因此,你可以在4GB的間隔中找到它們,就像GAM頁一樣。在資料檔案中,第一個SGAM頁是頁3,所以“2:1:3”就表示tempdb的第一個SGAM頁。 那麼,這兩種型別的資料頁是如何協助儲存引擎對區進行管理的呢?- 當儲存引擎分配一個統一區時,在GAM頁中尋找標記為1的頁面,把標記修改為0,SGAM頁中的標記位不做變動,保持為0;
- 當儲存引擎分配一個混合區時,在GAM頁中尋找標記為1的頁面,把標記修改為0,SGAM頁中的標記位從0修改1;
- 當儲存引擎尋找一個有空閒頁的混合區是,直接在SGAM頁中查詢標記位1對應的資料頁;如果沒有找到,則會重新分配一個混合區。
1.2.3 IAM
區的分配,使用GAM及SGAM管理;頁的使用情況,採用PFS頁管理。那麼,每一個數據庫物件在各個頁裡或者區裡的儲存情況,由誰協助管理呢?答案是 IAM頁。 一個表格中,IAM頁用來描述資料的分佈情況,基於分配單元來描述。根據實際資料的儲存情況,分為以下3種分配單元:- IN_ROW_DATA
- 儲存堆或索引分割槽,即heap和B-tree。
- LOB_DATA
- 儲存大型物件 (LOB) 資料型別,例如 xml、varbinary(max) 和 varchar(max)。
- ROW_OVERFLOW_DATA
- 儲存超過 8,060 位元組行大小限制的 varchar、nvarchar、varbinary 或 sql_variant 列中儲存的可變長度資料。
每個有資料的表格,至少有一個 IAM頁來管理 IN_ROW_DATA的儲存情況,如果表格裡有LOB_DATA,則會多一個IAM頁來管理LOB_DATA,ROW_OVERFLOW_DATA也是一樣。
2 資料頁結構
資料頁有4個部分:頁頭、行記錄、空閒空間及行偏移量。詳見下圖:2.1 頁頭
佔用96位元組,儲存跟該頁面相關的系統資料。
頁頭的內容如下:
2.2 行記錄
- 儲存資料行記錄以及索引資料
- 行記錄也可以在獨立頁面上儲存,比如行溢位資料即LOB資料
2.3 空閒空間
- 除去頁頭,行記錄,以及偏移量剩下的空間,提供給行記錄及行偏移量使用
2.4 行偏移量
- 行偏移是一個個小塊組成的,每個小塊2個位元組,表示資料行從第幾個位元組後開始記錄,也就是距離頁頭多少偏移量開始記錄
- 儲存方式是從有往左儲存,用槽位來描述,slot 0 ,slot 1 ....
- 行偏移量記錄的內容是什麼呢?該行記錄從哪個位元組開始,一般情況下,slot 1 從第96個位元組後開始
- 常說的聚集索引儲存順序是物理排序,指的不是行記錄物理排序,而是行偏移量物理排序,資料頁中,行記錄都是順序往後新增的,通過修改行偏移量來達到聚集索引的順序查詢
3 查詢資料頁儲存格式的途徑
檢視資料頁儲存方式這裡簡單介紹兩種方式:dbcc page檢視以及dbcc ind檢視,這兩個指令都是非公開的指令,所以msdn上找不到相應的使用說明。不過,還是可以通過 技術內幕的相關資料來查閱分析。 這兩個指令在開啟跟蹤標記2588後可以檢視其引數說明,開啟跟蹤標記3604後,可以把指令執行結果放回到客戶端而不是記錄在錯誤日誌中。3.1 dbcc ind
3.1.1 語法說明
檢視ind的引數說明,開啟跟蹤標記2588,help查詢。DBCC TRACEON(2588) DBCC HELP('ind') DBCC 執行完畢。如果 DBCC 輸出了錯誤資訊,請與系統管理員聯絡。 dbcc IND ( { 'dbname' | dbid }, { 'objname' | objid }, { nonclustered indid | 1 | 0 | -1 | -2 } [, partition_number] ) DBCC 執行完畢。如果 DBCC 輸出了錯誤資訊,請與系統管理員聯絡。輸出的格式有4種方式,不同方式,輸出不一樣。
- -2:返回所有IAM頁,基於管理行內資料頁,行溢位資料頁及大物件資料頁的IAM頁
- -1:返回所有IAM頁及資料頁。
- 0:返回管理行內資料頁的IAM頁,行內資料頁
- 1:返回聚集索引的資料頁資訊及IAM頁資訊(同-1)
- 2:返回第1個非聚集索引的資料頁資訊及IAM頁資訊
- 3:返回第2個非聚集索引的資料頁資訊及IAM頁資訊
- ...
- n:返回第(n-1)個非聚集索引的資料頁資訊及IAM頁資訊(n>1)
3.1.2 測試案例
新建表格,tbpage_c,包含大資料物件及行溢位情況。INSERT一行資料,然後分析。資料庫中,每行資料預設儲存在同一個資料頁,如果一個數據頁儲存不了一行資料,則會出現行溢位情況,具體可自行了解行溢位,所以在這個表格裡邊,設定兩個資料列佔用空間>8k,具體見表SQL如下,造資料的SQL如下。create table tbpage_c(id int identity(1,1) not null primary key ,namea varchar(6000),nameb varchar(3000),descriptions text) #name_a INSERT 6000個字元,name_b INSERT 3000個字元,descriptions INSERT 100個字元 INSERT INTO tbpage_c(NAMEA,nameb,descriptions) select substring(stuff((select name+',' from master.dbo.spt_values for xml path('')),1,1,''),1,6000) , substring(stuff((select name+',' from master.dbo.spt_values for xml path('')),1,1,''),1,3000) , substring(stuff((select name+',' from master.dbo.spt_values for xml path('')),1,1,''),1,100)
dbcc ind('dbpage','tbpage_c',-2)
選項為-2,顯示錶格的所有IAM頁面。由於表格存在行溢位及大物件列,所以會有其相對應的IAM頁面,故可以看到有3個IAM,分別為 In-row data ,Row-overflow data ,LOB data。
dbcc ind('dbpage','tbpage_c',-1) 選項為-1,返回所有IAM頁及資料頁。- 資料頁號310,309屬於 In-row data 型別。309記錄實際資料,310記錄In-row data實際資料頁的分佈情況。
- 資料頁號307,308屬於 Row-overflow data 型別。307記錄實際資料,308記錄 Row-overflow data 實際資料頁的分佈情況。
- 資料頁號305,306屬於 LOB data 型別。305記錄實際資料,306記錄 LOB data 實際資料頁的分佈情況。
3.2 dbcc page
3.2.1 語法說明
檢視page的引數說明,開啟跟蹤標記2588,help查詢。DBCC TRACEON(2588) DBCC HELP('PAGE') DBCC 執行完畢。如果 DBCC 輸出了錯誤資訊,請與系統管理員聯絡。 dbcc PAGE ( {'dbname' | dbid}, filenum, pagenum [, printopt={0|1|2|3} ]) DBCC 執行完畢。如果 DBCC 輸出了錯誤資訊,請與系統管理員聯絡輸出的格式有4種方式,不同方式,輸出不一樣。
- 0:輸出可讀形式的資料頁頁頭資料
- 1:輸出可讀形式的資料頁頁頭資料,並且還有槽位對應記錄的十六進位制內容
- 2:輸出可讀形式的資料頁頁頭資料,輸出整個資料頁頁頭的十六進位制資料,整一頁的內容都顯示,包括未使用的空間。
- 3:輸出可讀形式的資料頁頁頭資料,並且包括記錄中每個欄位的可讀形式,行溢位資料也會顯示資料內容,但是大物件則不顯示內容,而是說明其儲存位置!所以選項3,也是輸出內容最全面的。
3.2.2 測試案例
採用3.1.2的表格,分析其 IN_ROW DATA的資料頁面,page_id=309 。 本次測試,沒有采用 with tableresults分析,如果dbcc page('dbpage',1,309,0) with tableresults,結果則是已表格形式返回,可以提供後期管理分析用。 選項為0,輸出可讀格式的資料頁 頁頭資料。DBCC TRACEON(3604)選項為1,輸出可讀形式的資料頁頁頭資料,並且還有槽位對應記錄的十六進位制內容。頁頭資料已在上文分析,不做處理,這裡截圖描述槽位對應記錄
dbcc page('dbpage',1,309,0) ---------------------------------------------------------------------------------------------------------- PAGE: (1:309) BUFFER: BUF @0x000000027C0827C0 bpage = 0x000000026FA86000 bhash = 0x0000000000000000 bpageno = (1:309) bdbid = 10 breferences = 0 bcputicks = 0 bsampleCount = 0 bUse1 = 46781 bstat = 0xb blog = 0x212121cc bnext = 0x0000000000000000 PAGE HEADER: Page @0x000000026FA86000 m_pageId = (1:309) m_headerVersion = 1 m_type = 1 /* m_pageId 當前頁面號碼;m_headerVersion 版本號,始終為1;m_type 頁面資料型別,1為資料頁面,10為IAM頁面等,具體參考pagetype */ m_typeFlagBits = 0x0 m_level = 0 m_flagBits = 0xc000 /* m_typeFlagBits 資料頁和索引頁為4,其他頁為0 m_level 該頁在索引頁(B樹)中的級數,0表示為葉子節點 m_flagBits 頁面標誌 */ m_objId (AllocUnitId.idObj) = 35 m_indexId (AllocUnitId.idInd) = 256 /* m_indexId (AllocUnitId.idInd) 索引ID,0 代表堆, 1 代表聚集索引, 2-250 代表非聚集索引 大於250就是text或image欄位 */ Metadata: AllocUnitId = 72057594040221696 Metadata: PartitionId = 72057594038976512 Metadata: IndexId = 1 Metadata: ObjectId = 341576255 m_prevPage = (0:0) m_nextPage = (0:0) /* Metadata: AllocUnitId 儲存單元的ID,sys.allocation_units.allocation_unit_id Metadata: PartitionId 資料頁所在的分割槽號,sys.partitions.partition_id Metadata: ObjectId 該頁面所屬的物件的id,sys.objects.object_id Metadata: IndexId sys.objects.object_id&sys.indexes.index_id m_prevPage 該資料頁的前一頁面 m_nextPage 該資料頁的後一頁面 */ pminlen = 8 m_slotCnt = 1 m_freeCnt = 5035 m_freeData = 3155 m_reservedCnt = 0 m_lsn = (39:400:68) m_xactReserved = 0 m_xdesId = (0:0) m_ghostRecCnt = 0 m_tornBits = 0 DB Frag ID = 1 /* pminlen 定長資料所佔的位元組數為多少個位元組 m_slotCnt 頁面中的資料的行數 m_freeCnt 頁面中剩餘的空間,還剩多少位元組的空間 m_freeData 頁面空閒空間的起始位置,一個頁面8KB約等於8192位元組 頁面空閒空間的位置在3155 m_reservedCnt 活動事務釋放的位元組數 m_lsn 日誌記錄號 m_xactReserved 最新加入到m_reservedCnt領域的位元組數 m_xdesId 新增到m_reservedCnt的最近的事務id m_ghostRecCnt 幻影資料的行數 m_tornBits 頁的校驗位或者被由資料庫頁面保護形式決定頁面保護位取代 資料庫頁面的 lsn SQL Server在記憶體中維護一個雜湊表,記錄下自己所有做過寫入動作的頁面最新的LSN(Log Sequence Number)值。 在下次讀出頁面的時候,會去比較這兩個值是否相等。由於LSN是個自動增長的唯一值,每個發生新修改的頁面, LSN的值會比原來的要大。所以如果讀到的LSN與記憶體中存放的不一致,就說明上次的寫入請求沒有真正完成。 這時824錯誤也會被觸發。 */ Allocation Status GAM (1:2) = ALLOCATED SGAM (1:3) = ALLOCATED PFS (1:1) = 0x60 MIXED_EXT ALLOCATED 0_PCT_FULL DIFF (1:6) = CHANGED ML (1:7) = NOT MIN_LOGGED
dbcc page('dbpage',1,309,1) ---------------------------------------------------------------------------------------------------------- 頁頭資訊省略中... Slot 0, Offset 0x60, Length 3059, DumpStyle BYTE /* Slot 槽位號,一個槽位一行資料,這一行資料從 0x60 = 96開始,長度是 3059 bytes 下文文該行記錄的16進位制內容 */ Record Type = PRIMARY_RECORD Record Attributes = NULL_BITMAP VARIABLE_COLUMNS Record Size = 3059 Memory Dump @0x000000001F978060 /*下文為這一行記錄 3059個位元組內容*/ 0000000000000000: 30000800 01000000 0400a003 002b80e3 0bf38b02 0............+...... 0000000000000014: 00000001 000000d5 69000070 17000033 01000001 ........i..p...3.... 0000000000000028: 00000028 72707429 2c594553 204f5220 4e4f2c53 ...(rpt),YES OR NO,S 000000000000003C: 59535245 4d4f5445 4c4f4749 4e532054 59504553 YSREMOTELOGINS TYPES 中間省略... 0000000000000BCC: 7072696d 61727920 6b65792c 616e7369 5f6e756c primary key,ansi_nul 0000000000000BE0: 6c5f6400 00d10700 00000031 01000001 000100 l_d........1....... OFFSET TABLE: Row - Offset 0 (0x0) - 96 (0x60)
選項為2, 輸出整個資料頁頁頭的十六進位制資料,整一頁的內容都顯示,包括未使用的空間。
dbcc page('dbpage',1,309,2) ---------------------------------------------------------------------------------------------------------- 頁頭資訊省略中... /*下文為一整頁的資料儲存情況,包括行記錄跟空閒空間,不區分槽位*/ DATA: Memory Dump @0x0000000028178000 0000000028178000: 01010000 00c00001 00000000 00000800 00000000 .................... 0000000028178014: 00000100 23000000 ab13530c 35010000 01000000 ....#.....S.5....... 0000000028178028: 27000000 90010000 44000000 00000000 00000000 '.......D........... 000000002817803C: 00000000 01000000 00000000 00000000 00000000 .................... 0000000028178050: 00000000 00000000 00000000 00000000 30000800 ................0... 0000000028178064: 01000000 0400a003 002b80e3 0bf38b02 00000001 .........+.......... 0000000028178078: 000000d5 69000070 17000033 01000001 00000028 ....i..p...3.......( 000000002817808C: 72707429 2c594553 204f5220 4e4f2c53 59535245 rpt),YES OR NO,SYSRE 00000000281780A0: 4d4f5445 4c4f4749 4e532054 59504553 2c535953 MOTELOGINS TYPES,SYS 省略中... 0000000028178C1C: 65726963 20726f75 6e646162 6f72742c 7072696d eric roundabort,prim 0000000028178C30: 61727920 6b65792c 616e7369 5f6e756c 6c5f6400 ary key,ansi_null_d. 0000000028178C44: 00d10700 00000031 01000001 00010000 00212121 .......1.........!!! 0000000028178C58: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 0000000028178C6C: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 省略中... 0000000028179FE0: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 0000000028179FF4: 21212121 21212121 21216000 !!!!!!!!!!`. OFFSET TABLE: Row - Offset 0 (0x0) - 96 (0x60)
選項為3, 輸出可讀形式的資料頁頁頭資料,並且包括記錄中每個欄位的可讀形式,行溢位資料也會顯示資料內容,但是大物件則不顯示內容,而是說明其儲存位置!
dbcc page('dbpage',1,309,3) ------------------------------------------------------------------------------------------------- 頁頭資訊省略中... Slot 0 Offset 0x60 Length 3059 /* Slot 槽位號,一個槽位一行資料,這一行資料從 0x60 = 96開始,長度是 3059 bytes */ Record Type = PRIMARY_RECORD Record Attributes = NULL_BITMAP VARIABLE_COLUMNS Record Size = 3059 Memory Dump @0x000000002BB78060 /*下文為這一行記錄 3059個位元組內容*/ 0000000000000000: 30000800 01000000 0400a003 002b80e3 0bf38b02 0............+...... 0000000000000014: 00000001 000000d5 69000070 17000033 01000001 ........i..p...3.... 0000000000000028: 00000028 72707429 2c594553 204f5220 4e4f2c53 ...(rpt),YES OR NO,S 000000000000003C: 59535245 4d4f5445 4c4f4749 4e532054 59504553 YSREMOTELOGINS TYPES 0000000000000050: 2c535953 52454d4f 54454c4f 47494e53 20545950 ,SYSREMOTELOGINS TYP 0000000000000064: 45532028 55504441 5445292c 41463a20 61676772 ES (UPDATE),AF: aggr 0000000000000078: 65676174 65206675 6e637469 6f6e2c41 503a2061 egate function,AP: a 中間省略... 0000000000000BB8: 2c6e756d 65726963 20726f75 6e646162 6f72742c ,numeric roundabort, 0000000000000BCC: 7072696d 61727920 6b65792c 616e7369 5f6e756c primary key,ansi_nul 0000000000000BE0: 6c5f6400 00d10700 00000031 01000001 000100 l_d........1....... /*下文為 在槽位0 slot 0 的 這一行記錄 ,詳細描述每一列的儲存情況*/ Slot 0 Column 1 Offset 0x4 Length 4 Length (physical) 4 /*slot 0,第一列 在本頁佔用4位元組,列名為id,值為1*/ id = 1 namea = [BLOB Inline Root] Slot 0 Column 2 Offset 0x13 Length 24 Length (physical) 24 /*slot 0,第2列,本頁佔用24位元組,列名為namea 這裡可以看到是發生了行溢位情況,列中沒有資料,但是儲存了該列的實際位置 實際大小為6000位元組,值 儲存在第一個檔案第307頁的 slot 0 槽位上*/ Level = 0 Unused = 0 UpdateSeq = 1 TimeStamp = 1775566848 Type = 2 Link 0 Size = 6000 RowId = (1:307:0) Slot 0 Column 3 Offset 0x2b Length 3000 Length (physical) 3000 nameb = (rpt),YES OR NO,SYSREMOTELOGINS TYPES,SYSREMOTELOGINS TYPES (UPDATE),AF: aggregate function,AP: applicati on,C : check cns,...省略中...primary key,ansi_null_d /*slot 0,第3列 ,本頁佔用3000位元組,列名為nameb ,值為 nameb= 的後面一大段中*/ descriptions = [Textpointer] Slot 0 Column 4 Offset 0xbe3 Length 16 Length (physical) 16 /*slot 0,第4列 ,該列為text資料型別,本頁佔用16位元組,列名為descriptions,其值儲存在第一個檔案的第305頁的 slot 1 槽位上*/ TextTimeStamp = 131137536 RowId = (1:305:1) Slot 0 Offset 0x0 Length 0 Length (physical) 0 /*該表格有主鍵 ,該行的keyhashvalue值*/ KeyHashValue = (8194443284a0)選項為3,還有一個特殊情況,就是當分析非聚集索引的時候,其返回會多一個 table
create table tbpage(id int primary key not null identity(1,1) ,cola int,colb varchar(10),colc varchar(100)) insert into tbpage(cola,colb,colc) select object_id,type,name from sys.objects create index ix_colc on tbpage(colc) select * from sys.indexes where name='ix_colc' dbcc ind('dbpage','tbpage',-1)dbcc page('dbpage',1,319,3) 返回多了一個可讀性的列表,詳細描述索引的列情況及鍵值情況,同時,原先的訊息內容也還保持。
參考博文: 參考書籍: 《SQL SERVER 2012 實施與實戰管理指南》
《SQL Server效能調優實戰》 《SQL SERVER 2005 技術內幕 儲存引擎》
相關推薦
SQL SERVER大話儲存結構(1)_資料頁型別及頁面指令分析
SQLServer的資料頁大小是8kb,8個連續的物理頁組成一個區。區分混合區跟統一區,混合區內可以儲存不同資料庫物件的內容,通常這個資料庫物件較小;統一區表示區內連續的8個數據頁儲存的都是同一個資料庫物件的內容。 SQL SERVER的磁碟讀寫是按頁級進行,每次I/O操作的資料最小
SQL SERVER大話儲存結構(3)_資料行的行結構
一行資料是如何來儲存的呢? 變長列與定長列,NULL與NOT NULL,實際是如何整理存放到 8k的資料頁上呢? 對錶格進行增減列,修改長度,新增預設值等DDL SQL,對行儲存結構又會有怎麼樣的影響呢? 什麼是大物件,什麼是行溢位,儲存引擎是如何處理它們呢?
SQL SERVER大話儲存結構(2)_非聚集索引如何查詢到行記錄
1 行記錄如何儲存 這裡引入兩個概念:堆跟聚集索引表。本部分參考MSDN。 1.1 堆表 堆表,沒有聚集索引的表格,可以建立一個或者多個非聚集索引。沒有按照某個規則進行儲存,一般來說,按照行記錄入表的順序,但是由於效能要求,可能會在不同區域移動入庫資料
sql server練習過程記錄(1)
sqlserver中 --將查詢結果作為一個臨時表 select * from (Select AVG(Grade) as avg, Sno from SC group by Sno) as A --將查詢結果插入一個新表(這個表不能預先被建立) select Sname, Sno,
java呼叫sql server的儲存過程(dbutils)
一般我們在寫介面或者後臺的時候,java用的是springmvc框架,而連線資料庫則用到的是jdbc(原始的),為了更加方便,通過配置檔案的方式連線資料庫(sql server2008),通過兩天的學習,和自己的揣摩,終於弄出來了,為了給一些需要的又剛好沒有找到這個方法的程
數據結構(12)_樹的概念及通用樹的實現
區域 指向 樹的高度 存儲結構 ges urn 深度 建堆 add 1.樹的定義與操作 1.1.樹的相關定義 1.樹的定義 樹是一種非線性的數據結構,右n(n>=0)個結點組成的有限集合,如果n=0,稱為空樹,如果n>0,則: 有一個特定的結點被稱之為跟結點(
SQL SERVER大話存儲結構(3)_數據行的行結構
bits 基礎 就會 mar ant rain 版權 bpa 一個數 一行數據是如何來存儲的呢? 變長列與定長列,NULL與NOT NULL,實際是如何整理存放到 8k的數據頁上呢? 對表格進行增減列,修改長度,添加默認值等DDL S
sql server建立儲存過程(有參,無參,有輸出)
student表已經有了,“建立”在中間,測試在最下面! select * from student; sid sname sex age tel s001 豐登兒 男 35 13527542451 s002 班克爾
SQL Server 全文索引介紹(轉載)
所在 ubd exec nchar 配置管理 system data ase 百度搜索 概述 全文引擎使用全文索引中的信息來編譯可快速搜索表中的特定詞或詞組的全文查詢。全文索引將有關重要的詞及其位置的信息存儲在數據庫表的一列或多列中。全文索引是一種特殊類型的基於標記的
C#類和結構(1)
mar 安全 類型安全 readline 參數 部分 public 方法的參數 play 1、結構功能特性? 實現代碼? 結構用struct關鍵字定義的,與類類似,但有本質區別。結構實質是一個值類型,它不需要對分配的。 結構的特性: (1)、結構作為參數傳遞時,是值傳遞。
SQL SERVER的鎖機制(一)——概述(鎖的種類與範圍)
row 定性 針對 共享 互斥 drop 問題 停止 共享鎖 SQL SERVER的鎖機制系列: SQL SERVER的鎖機制(一)——概述(鎖的種類與範圍) SQL SERVER的鎖機制(二)——概述(鎖的兼容性與可以鎖定的資源) SQL SERVER的鎖機制(三)
C語言程序設計第五次作業——循環結構(1)
執行 wan 裏的 images for語句 urn 語句 eof uil (一)改錯題 輸出華氏攝氏溫度轉換表:輸入兩個整數lower和upper,輸出一張華氏攝氏溫度轉換表,華氏溫度的取值範圍是{lower,upper},每次增加2℉。計算公式如下:c = 5×(f-3
全廢話SQL Server統計信息(2)——統計信息基礎
position amp 要去 fault href 過程 字符串 最大 實用 接上文:http://blog.csdn.net/dba_huangzj/article/details/52835958我想在大地上畫滿窗子,
SQL Server 2012安裝配置(Part1 )
數據庫 SQL Server 1 安裝前準備安裝 SQL Server 2012 服務器及客戶端前,需要提前做以下兩項準備:SQL Server2012 依賴於.Net Framework 3.5.1 組件。Windows Server 2012 缺省未安裝該組件,所以需要手動安裝。為保證SQL Se
SQL Server 2012安裝配置(Part2 )
數據庫 SQL Server SQL Server 2012安裝配置(Part1 )2. 服務器安裝運行安裝程序後,首先進入 SQL Server 安裝中心。選擇左側導航樹中的“安裝”菜單項。圖2-1 SQL Server 安裝中心 在右側菜單中點擊“全新 SQL Server 獨立安裝或向現有安裝添
SQL Server 2012安裝配置(Part3 )
數據庫 SQL Server SQL Server 2012安裝配置(Part1 ) SQL Server 2012安裝配置(Part2 ) ? 3 客戶端安裝 3.1 安裝客戶端 功能選擇之前的操作與 SQL Server 安裝方法相同,在此不再贅述,下面將直接從功能選擇開始。 圖3-1 功能
SQL Server 2012安裝配置(Part4 )
數據庫 SQL Server SQL Server 2012安裝配置(Part1)SQL Server 2012安裝配置(Part2)SQL Server 2012安裝配置(Part3 )SQL Server 2012安裝配置(Part4 ) 5 卸載 點擊系統“開始”按鈕,選擇“控制面板”菜單項,
Linux文件系統學習(二)之重要數據結構(1)
class targe html evel 系統結構 會有 集合 spec lan 轉載自:https://blog.csdn.net/wudongxu/article/details/6436894 《Linux內核設計與實現》 http://www.ibm.com/
了解java虛擬機---JVM的基本結構(1)
show 擁有 處理 對象 文章 xss 分享 action 啟動 1. JVM的基本結構 1.1. 類加載子系統 類加載子系統負責從文件或者網絡中加載Class信息,加載的類信息存放於方法區的內存空間。方法區中可能還會存放運行時常量信息,包括字符串與數字常量。(這部分常
SQL Server中有關約束(constraint)的一些細節
並發 自動生成 fault 自動 方式 view str 自己 數據庫 原文:SQL Server中有關約束(constraint)的一些細節 本文出處:http://www.cnblogs.com/wy123/p/7350265.html (保留出處並非什麽原創作品權