亚洲人成网站在线播放2019 _日韩国产欧美精品_久久夜色精品国产欧美乱_在线视频福利一区

當前位置:首頁 > 網(wǎng)站舊欄目 > 學(xué)習(xí)園地 > 程序開發(fā)教程 > 解析SQL Server的數(shù)據(jù)類型 BLOB

解析SQL Server的數(shù)據(jù)類型 BLOB
2010-01-17 10:50:16  作者:  來源:
本文解釋了SQL Server用于訪問和存儲數(shù)據(jù)的BLOB數(shù)據(jù)類型,解析了SQL Server BLOB數(shù)據(jù)存儲,訪問的方法以及如果降低你的SQL Server BLOB存儲的每個字節(jié)的總成本。

  BLOB數(shù)據(jù)是一個每條記錄都擁有大量數(shù)據(jù)的字段。這個數(shù)據(jù)可以是文本格式的或二進制格式的。當在SQL Server中使用BLOB數(shù)據(jù)時,每條記錄的數(shù)據(jù)量一般都遠遠超過了一個單獨記錄的8K的限制。

  有多種數(shù)據(jù)類型用于存儲BLOB數(shù)據(jù),并且它們隨著時間已有所改變。可用于BLOB存儲的數(shù)據(jù)類型很多年都沒有變,但是在SQL Server 2005中,微軟推出了許多新的數(shù)據(jù)類型。在SQL Server 2008中,微軟甚至計劃推出更多的數(shù)據(jù)類型,不過到目前為止,他們還沒有在CTP版本中推出這些數(shù)據(jù)類型。

  在SQL Server 2000和更早的版本中,我們被限制于TEXT、NTEXT和IMAGE數(shù)據(jù)類型。TEXT數(shù)據(jù)類型是用于存儲非Unicode的BLOB數(shù)據(jù),而NTEXT數(shù)據(jù)類型是用于存儲Unicode 的BLOB數(shù)據(jù)。IMAGE數(shù)據(jù)類型是用于存儲二進制BLOB數(shù)據(jù)的。你可以使用IMAGE數(shù)據(jù)類型來存儲任何二進制數(shù)據(jù),例如圖片、office文檔、壓縮數(shù)據(jù)等等。因為數(shù)據(jù)是二進制格式的,所以它可以是Unicode的也可以是非Unicode的。

  SQL Server 2005數(shù)據(jù)類型是基于VARCHAR、NVARCHAR、VARBINARY和XML的。在使用這些數(shù)據(jù)類型時,一般你會指定要存儲的數(shù)據(jù)的最大規(guī)模。為了在這些字段里存儲BLOB數(shù)據(jù),你要指定字段的最大規(guī)模。這些數(shù)據(jù)類型允許你在每條記錄里最大存儲2GB的數(shù)據(jù)(對于字符和二進制數(shù)據(jù)是2^31位,對于Unicode數(shù)據(jù)是2^30)。微軟計劃在未來的微軟SQL Server版本中刪除TEXT、NTEXT和IMAGE數(shù)據(jù)類型,它們的使用將會被轉(zhuǎn)換到新的VARCHAR(MAX)、NVARCHAR(MAX)、VARBINARY(MAX)和XML數(shù)據(jù)類型上。


  CREATE TABLE BlobData 
  (ID int PRIMARY KEY, 
  FirstName nvarchar(30), 
  LastName nvarchar(30), 
  EmailAddress varchar(255), 
  [Resume] nvarchar(MAX)) 


  在SQL Server 2008中,傳說我們會得到一個叫做FILESTREAM的新的數(shù)據(jù)類型,它可以將二進制數(shù)據(jù)例如office文檔存儲到和普通的數(shù)據(jù)庫文件不同的地方。通過將這個數(shù)據(jù)存儲到和普通的MDF和NDF數(shù)據(jù)文件不同的地方,我們可以將它存儲到單獨的硬盤上來將訪問BLOB數(shù)據(jù)對數(shù)據(jù)庫中其余內(nèi)容造成的性能影響降到最低。

  SQL Server BLOB數(shù)據(jù)怎么存儲和訪問?

  在使用TEXT、NTEXT和IMAGE數(shù)據(jù)類型時,數(shù)據(jù)是不和普通數(shù)據(jù)存儲在一起的。一個被稱作指針的很小的二進制值,和普通數(shù)據(jù)存儲在一起。這個二進制值指向數(shù)據(jù)文件里的數(shù)據(jù)實際存儲的位置。

  當存儲VARCHAR(MAX)、NVARCHAR(MAX)、VARBINARY(MAX)和XML數(shù)據(jù)類型的數(shù)據(jù)時,如果數(shù)據(jù)小于一行數(shù)據(jù)8K的最大限制,那么這個數(shù)據(jù)被存儲到這個頁面內(nèi)。但是如果這個數(shù)據(jù)比一行數(shù)據(jù)8K的最大限制大的話,它會以和存儲遺留數(shù)據(jù)類型一樣的存儲方式來存儲,并且它會通過一個二進制指針的值被訪問。

  注意:這個二進制值和位置都是在后臺處理的,對于用戶是不可見的。

  為了以TEXT、NTEXT和IMAGE數(shù)據(jù)類型讀取數(shù)據(jù),需要使用READTEXT命令。這個命令接受一個列名還有一個16位的二進制指針,要讀取的第一個字符和要讀取的字符數(shù)目。它使用TEXTPTR函數(shù)來獲得正確的二進制指針,這個二進制指針是用于定位物理文件中的數(shù)據(jù)的:


  DECLARE @ptr varbinary(16); 
  SELECT @ptr = TEXTPTR(LongText) 
  FROM TextDataExample 
  where TextID = 1 
  READTEXT TextDataExample.LongText @ptr 1 50; 


  與READTEXT命令類似的,還有一個WRITETEXT命令用于將數(shù)據(jù)插入到記錄中去。和READTEXT命令一樣,WRITETEXT命令使用TEXTPTR函數(shù)來定位物理文件中的數(shù)據(jù):


  DECLARE @ptr varbinary(16); 
  SELECT @ptr = TEXTPTR(LongText) 
  FROM TextDataExample 
  where TextID = 1 
  READTEXT TextDataExample.LongText @ptr 'Sample data'; 


  這些新的數(shù)據(jù)類型,不像他們之前的那些數(shù)據(jù)類型,它們可以不使用READTEXT 和WRITETEXT命令就可以很容易的被訪問到。這些新的數(shù)據(jù)類型能夠這么快就這么流行的一部分原因是因為要使用他們不需要額外的命令。你可以用我們平常操縱數(shù)據(jù)所使用的普通的SELECT、INSERT和UPDATE DML來使用這些數(shù)據(jù)類型。不幸的是,因為這個FILESTREAM數(shù)據(jù)類型還沒有發(fā)布,沒有關(guān)于怎樣使用它的示例代碼可以公布。

  隨著分層存儲而出現(xiàn)的成本效率

  使用一個叫做分層存儲的存儲設(shè)計是一個降低你的SQL Server BLOB存儲的每個字節(jié)的總成本的簡單方法。有了分層存儲技術(shù),高訪問的數(shù)據(jù)被放置在更快,更貴的存儲器里。不是經(jīng)常訪問的數(shù)據(jù)放在慢一些、較便宜的存儲器上。通常情況下,BLOB數(shù)據(jù)被頻繁的訪問,而由于存儲在BLOB數(shù)據(jù)列中的信息數(shù)量,使用分層存儲通常是成本最有效的存儲方法。當創(chuàng)建一個較便宜的存儲層時,更大的、較慢的硬盤被用來創(chuàng)建第二個RAID數(shù)組,而這個RAID數(shù)組是用來存放第二個文件組的,該文件組存儲BLOB數(shù)據(jù)。

  分層存儲是通過告訴SQL Server在一個獨立于行數(shù)據(jù)的文件組里存儲BLOB數(shù)據(jù)來使用的。這個指派發(fā)生在CREATE TABLE命令使用TEXTIMAGE_ON參數(shù)創(chuàng)建了這個表的時候。一個SQL Server表里的所有BLOB數(shù)據(jù)存儲在一個單獨的文件組里。如果你想在兩個文件間分離BLOB數(shù)據(jù),你必須同時將你的表分割為兩個表,并通過TEXTIMAGE_ON參數(shù)為每一個表指定一個不同的組:


  CREATE TABLE TextDataExample 
  (TextID int IDENTITY(1,1), 
  TextDescription varchar(25), 
  LongText TEXT) 
  ON [PRIMARY] TEXTIMAGE_ON [TextDataFileGroup] 

  不幸的是,一旦表被創(chuàng)建了就沒有簡單的方法來改變包含BLOB數(shù)據(jù)的文件組。移動BLOB數(shù)據(jù)到另一個文件組的唯一方法是創(chuàng)建一個新的表,將數(shù)據(jù)復(fù)制到新的表里,刪除舊的表,然后將新的表重命名為正確的名稱。

  假設(shè)你有一個用這個定義創(chuàng)建的表:


  CREATE TABLE TextDataExample 
  (TextID int IDENTITY(1,1) PRIMARY KEY, 
  TextDescription varchar(25), 
  LongText TEXT) 
  ON [PRIMARY] 


  并且你想轉(zhuǎn)移數(shù)據(jù)到用這個定義創(chuàng)建的表上:


  CREATE TABLE TextDataExample 
  (TextID int IDENTITY(1,1) PRIMARY KEY, 
  TextDescription varchar(25), 
  LongText TEXT) 
  ON [PRIMARY] TEXTIMAGE_ON [TextDataFileGroup] 


  那你要用一個與這個類似的腳本:


  CREATE TABLE TextDataExample_Temp 
  (TextID int IDENTITY(1,1) PRIMARY KEY, 
  TextDescription varchar(25), 
  LongText TEXT) 
  ON [PRIMARY] TEXTIMAGE_ON [TextDataFileGroup] 
  SET IDENTITY_INSERT TextDataExample_Temp ON 
  INSERT INTO TextDataExample_Temp 
  (TextID, TextDescription, LongText) 
  SELECT TextID, TextDescription, LongText 
  FROM TextDataExample WITH (TABLOCK) 
  SET IDENTITY_INSERT TextDataExample_Temp OFF 
  DROP TABLE TextDataExample 
  exec sp_rename 'TextDataExample_Temp', 
  'TextDataExample', 'object' 


  在這個過程中要確保在刪除舊表以后在新的表上重新創(chuàng)建所有需要的索引。這些索引應(yīng)該在舊表被刪除之后創(chuàng)建,以便萬一任何腳本或存儲過程要求唯一的索引名稱才是有效的,那這樣相同的索引名稱就可以使用了。

  既然SQL Server支持BLOB數(shù)據(jù),你在存儲BLOB數(shù)據(jù)到SQL Server中時,一定要謹慎。存儲大量BLOB數(shù)據(jù)到你的數(shù)據(jù)庫中會影響你的數(shù)據(jù)庫性能。雖然有一些方法可以在性能方面給你些幫助,但是它通常最終導(dǎo)致將BLOB數(shù)據(jù)移出SQL Server數(shù)據(jù)庫存入文件系統(tǒng)。雖然這時把BLOB數(shù)據(jù)存放在數(shù)據(jù)庫里看起來是一個簡單的解決方案,但它會導(dǎo)致后來隨著系統(tǒng)發(fā)展而來的性能問題。這個文件系統(tǒng)對于BLOB數(shù)據(jù)來說通常是最好的存放地址,但是如果你選擇存放到數(shù)據(jù)庫中,一定要確保小心使用。

安徽新華電腦學(xué)校專業(yè)職業(yè)規(guī)劃師為你提供更多幫助【在線咨詢
亚洲人成网站在线播放2019 _日韩国产欧美精品_久久夜色精品国产欧美乱_在线视频福利一区
国产精品一区在线播放| 久久久久国产精品免费| 丁香六月激情婷婷| 久久久久久a亚洲欧洲aⅴ| 日本久久高清视频| 久久久av电影| 国产欧美日韩最新| 亚洲a中文字幕| 色777狠狠综合秋免鲁丝| 黄色a级片免费看| 久久综合国产精品台湾中文娱乐网| 国产裸体舞一区二区三区| 中文字幕成人一区| 国产不卡一区二区三区在线观看| 欧美亚洲成人网| 精品中文字幕在线2019| 91av在线不卡| 精品欧美一区二区三区久久久 | 国产精品日韩欧美一区二区| 国产一区玩具在线观看| 亚洲在线观看视频| 国产成人无码av在线播放dvd| 国产私拍一区| 亚洲精品成人三区| 国产成人精品无码播放| 国产欧美日韩精品丝袜高跟鞋| 亚洲国产另类久久久精品极度| 日韩综合中文字幕| 成人免费无码av| 日韩免费av一区二区三区| 欧美精品在线免费| 国产精品91久久| 国产一区二区三区小说| 色播亚洲婷婷| 精品国产综合久久| 日韩在线视频免费观看| 爱福利视频一区二区| 欧美精品欧美精品系列c| 久久久久国产视频| 久久久久久亚洲精品不卡4k岛国| 国产日韩精品一区观看| 日本高清+成人网在线观看| 美女999久久久精品视频| 久久久久久国产三级电影| 国产女主播自拍| 欧美日韩激情四射| 天天干天天操天天干天天操| 久热精品视频在线观看一区| 久久国产精品高清| 99久re热视频这里只有精品6| 欧美精品第三页| 日韩av一二三四区| 一区二区不卡在线| 国产精品视频1区| 久久久最新网址| www.欧美黄色| 国产视频不卡| 女女同性女同一区二区三区91| 色婷婷精品国产一区二区三区| 欧美日本中文字幕| 国产精品欧美一区二区| 久久草.com| 国产精品69久久久| 成人av网站观看| 国产一区二区精品在线| 欧美日韩一区二区三区免费| 日本国产一区二区三区| 午夜老司机精品| 中文字幕久精品免| 国产精品福利小视频| 色妞在线综合亚洲欧美| 久久日韩精品| 99久久激情视频| 成人久久久久久| 国产日本欧美一区二区三区| 韩国成人一区| 黄色污污在线观看| 欧美日韩午夜爽爽| 欧美一区二区在线视频观看| 日本视频一区二区不卡| 日韩av观看网址| 天天好比中文综合网| 亚洲爆乳无码专区| 亚洲综合日韩中文字幕v在线| 久久亚洲精品毛片| 久久亚洲精品小早川怜子66| 国产精品毛片一区视频| 久久久极品av| 久久视频在线看| 国产精品日韩欧美一区二区三区| 精品国产一区二区三区久久狼5月| 久久成人资源| 日韩有码在线电影| 国产成人久久777777| 久久精品视频99| 国产精品日韩高清| 国产精品黄色av| 欧美xxxx14xxxxx性爽| 九色成人免费视频| 一本色道久久88亚洲精品综合 | 国产亚洲欧美在线视频| 国产中文字幕日韩| 国产精品一区二区三区在线播放 | 久久久久久美女| 色妞在线综合亚洲欧美| 久久色在线播放| 久久成人在线视频| 中文字幕一区二区三区在线乱码| 最新av网址在线观看| 亚洲午夜高清视频| 亚州欧美日韩中文视频| 日本天堂免费a| 欧美成人一区二区在线观看| 国产午夜精品一区| 99在线视频首页| 国产高清精品一区二区三区| 日韩中文在线不卡| 麻豆国产精品va在线观看不卡| 欧美激情18p| 日韩av电影在线免费播放| 欧美精品久久久久久久免费| 国产欧美一区二区白浆黑人| 91成人免费观看网站| 国产成人一区二区在线| 国产精品日韩专区| 一区二区三区四区在线视频| 色狠狠久久av五月综合| 激情伦成人综合小说| 国产伦精品一区二区三区在线| 久久久性生活视频| 国产精品美女www| 中文字幕精品在线播放| 天天综合色天天综合色hd| 欧美影院在线播放| 国产青春久久久国产毛片| 国产精彩精品视频| 国产精品久久久久久久久免费| 一区二区视频国产| 日韩一二区视频| 国产一级二级三级精品| 国产精品aaa| 国产精品久久二区| 无码人妻精品一区二区蜜桃网站 | 精品视频免费在线播放| 99视频日韩| 国产精品视频一区二区三区四| 中文字幕一区二区三区有限公司| 人妻少妇精品无码专区二区| 国产日韩欧美精品| 国产成人a亚洲精品| 欧美激情一级欧美精品| 欧美亚洲国产视频小说| 91精品国产高清自在线| 国产精品国产福利国产秒拍| 日韩在线视频在线| 国产乱肥老妇国产一区二 | 亚洲精品乱码视频| 国产综合在线观看视频| 国产高清精品一区二区| 欧美成在线视频| 日韩久久久久久久| 91久久精品久久国产性色也91| 国产精品国产亚洲精品看不卡 | 国产精品久久激情| 日韩免费中文专区| 成人9ⅰ免费影视网站| 国产精品国产三级国产aⅴ9色 | 97人人模人人爽视频一区二区| 国产精品久久久久久久久久尿 | 欧美日韩亚洲一区二区三区四区| 131美女爱做视频| 美日韩精品免费视频| 欧美成人第一区| 日韩在线免费视频| 日韩中文在线字幕| 国产美女主播在线播放| 国产精品免费久久久久久| 奇米888一区二区三区| 久久五月天婷婷| 亚洲精品在线免费| av一区二区三区免费观看| 精品久久久久久中文字幕动漫| 精品日本一区二区| 俺也去精品视频在线观看| 性欧美激情精品| 99久久综合狠狠综合久久止| 久久久久久91香蕉国产| 国产日韩欧美亚洲一区| 欧美成人亚洲成人| 免费黄色福利视频| 久久久精品免费| 日韩精品欧美一区二区三区| 国产成人综合av| 亚洲国产一区二区三区在线| 91精品视频免费看| 午夜dv内射一区二区| 久久免费看毛片| 日韩亚洲一区在线播放| 久草视频国产在线| 亚洲日本欧美在线|