偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

SQL Server表最小行的一個糾結(jié)問題

數(shù)據(jù)庫 SQL Server 數(shù)據(jù)庫運維
昨天一個同事突然問我,說他在SQL 2000數(shù)據(jù)庫創(chuàng)建如下表的時候,突然碰到了下面一條警告信息。The table 'Log' has been created but its maximum row size (17159) exceeds the maximum number of bytes per row (8060).

昨天一個同事突然問我,說他在SQL 2000數(shù)據(jù)庫創(chuàng)建如下表的時候,突然碰到了下面一條警告信息。SQL腳本和警告信息如下:

  1. IF OBJECT_ID(N'Log'IS NULL 
  2. BEGIN 
  3. CREATE TABLE Log  
  4. (  
  5. [Date] DATETIME,  
  6. [Thread] NVARCHAR(255),  
  7. [Level] NVARCHAR(50),  
  8. [Logger] NVARCHAR(255),  
  9. [Message] NVARCHAR(4000),  
  10. [Exception] NVARCHAR(4000)  
  11. )  
  12. END 
  13. ELSE 
  14. PRINT('該表已經(jīng)存在,請檢查數(shù)據(jù)庫');  
  15. GO  
  16. Warning: 
  17. The table 'Log' has been created but its maximum row size (17159) exceeds the maximum number of bytes per row (8060). 
  18. INSERT or UPDATE of a row in this table will fail if the resulting row length exceeds 8060 bytes. 

我以前也沒有遇見過這樣的警告信息,當(dāng)時我在SQL SERVER 2000 下面執(zhí)行這段腳本,果然有這個警告信息,還有就是為什么Maximun ROW SIZE 是17159?;當(dāng)我在SQL SERVER 2005 下面執(zhí)行這段腳本卻沒有警告信息出現(xiàn),難道SQL SERVER 2005 與SQL SERVER 2000在存貯機制上面有什么不同?在搞清楚這些問題前,我們先來看看其它的一些相關(guān)問題,就是SQL SERVER 2000/2005中***數(shù)據(jù)行都是8060字節(jié)(對定長數(shù)據(jù)而言), 其中SQL SERVER 2000中可以使用的大小為8039字節(jié), 而SQL SERVER 2005可以使用的大小為8053字節(jié)。我們可以從下面的腳本中實驗一下(SQL SERVER 2005)

  1. CREATE TABLE TEST  
  2. (  
  3. FIELD1 CHAR(4000),  
  4. FIELD2 CHAR(4000),  
  5. FIELD3 CHAR(53)  
  6. )  
  7. CREATE TABLE TEST1  
  8. (  
  9. FIELD1 CHAR(4000),  
  10. FIELD2 CHAR(4000),  
  11. FIELD3 CHAR(54)  

最小行大小8061 = 4000 + 4000 + 54 + 7(內(nèi)部開銷)。下面我們改變下上面腳本的數(shù)據(jù)類型,如下所示,看看在SQL SERVER 2005下的情況

  1. IF OBJECT_ID(N'Log'IS NULL 
  2. BEGIN 
  3. CREATE TABLE Log  
  4. (  
  5. [Date] DATETIME,  
  6. [Thread] CHAR(255),  
  7. [LevelCHAR(50),  
  8. [Logger] CHAR(255),  
  9. [Message] CHAR(4000),  
  10. [Exception] CHAR(4000)  
  11. )  
  12. END 
  13. ELSE 
  14. PRINT('該表已經(jīng)存在,請檢查數(shù)據(jù)庫');  
  15. GO 

那么最小行8575是怎么算出來的呢,我們先看這張經(jīng)典數(shù)據(jù)行結(jié)構(gòu)圖(引自Inside SQL SERVER)

其實就是8 + 255 + 50 + 255 + 4000 + 4000 = 8568 + 7 = 8575 其中的7個字節(jié)是這樣來的

  1. Status Bits A 1  
  2. Status Bits B 1  
  3. Length of fixed-length ........ 2  
  4. number of columns 2  
  5. Null bitmap 1 bit for each column (6/8)1 

由于表里面沒有變長字段,所以其它與變長相關(guān)的字節(jié)為0 所以為7。 那么接下來我們看看開篇的問題為什么 maximum row size (17159),

8 + 255* 2 + 50 * 2 + 255 * 2 + 4000 * 2 + 4000 *2 = 17128

1 + 1 + 2 + 2 + 1 + 2 + 2* 5 = 19

那么17128 + 19 = 17147 但是結(jié)果是17159,有點不明,查了很多資料也沒搞清楚,這個17159 是怎么算出來的,呵呵,希望高手來解答

原文鏈接:http://www.cnblogs.com/kerrycode/archive/2011/05/19/2050589.html

【編者推薦】

  1. 思科推新數(shù)據(jù)中心解決方案支持SQL Server
  2. 數(shù)據(jù)庫日常維護常用的腳本部分收錄
  3. 云端數(shù)據(jù)庫:微軟SQL Azure及其應(yīng)用場景
  4. SQL點滴之收集SQL Server線程等待信息
責(zé)任編輯:艾婧 來源: 博客園
相關(guān)推薦

2012-04-14 21:11:46

iPhone 5

2021-01-18 05:23:14

SQL 排序Server

2011-05-06 14:19:29

ExcelSQL Server

2011-04-13 14:20:52

SQL Server主鍵

2015-07-20 17:05:38

SQL ServerNULL值

2009-04-20 15:54:04

SQL Server重復(fù)行

2010-06-28 12:46:09

SQL Server

2010-09-16 15:25:46

SqlServer20

2010-11-09 15:30:01

Sql server時

2014-07-07 10:58:22

SQL Server

2011-08-15 13:20:07

SQL Server唯一索引視圖

2010-09-16 16:06:01

sql server表

2011-08-15 11:24:46

SQL Server事務(wù)

2010-07-23 14:11:18

SQL Server

2011-08-01 16:10:00

SQL Server

2010-10-19 16:40:34

sql server掛

2010-07-22 16:02:29

2021-06-10 13:50:55

代碼開發(fā)數(shù)據(jù)庫

2010-06-28 09:53:11

SQL Server數(shù)

2010-07-15 13:54:47

點贊
收藏

51CTO技術(shù)棧公眾號