當我在列中使用SQL Server Text
或Varchar(max)
數據類型時,它會創建數據庫過大:例如1000行包含varchar(max)
使用大約1000 Mb(1Gb)!!!!SQL Server文本數據類型或Varchar(max)會創建數據庫太大
這是正常的嗎?
感謝您的幫助
編輯我的文本字段大約5至最大50 KB
當我在列中使用SQL Server Text
或Varchar(max)
數據類型時,它會創建數據庫過大:例如1000行包含varchar(max)
使用大約1000 Mb(1Gb)!!!!SQL Server文本數據類型或Varchar(max)會創建數據庫太大
這是正常的嗎?
感謝您的幫助
編輯我的文本字段大約5至最大50 KB
這取決於你的桌子裏面有什麼。 如果你有1000行具有1MB的數據,你將有1000 MB
嘗試運行:
select datalength(yourField) from yourTable
數據長度功能會給你多少字節由列
謝謝這真的幫助我,我試圖通過recod檢查記錄,以檢查是否真的抓住我看到的是真正抓住我發送的數據 – 2012-03-23 13:59:29
查看此鏈接以獲取更多參考:http:// msdn.microsoft.com/en-us/library/ms173486.aspx 如果我的回答helepd你,記得投票和標記爲答案 – Diego 2012-03-23 14:04:02
我不能投票,因爲我在這裏是新的。但是非常感謝 – 2012-03-23 14:18:43
運行sys.sp_spaceused @objname = N'YourTable';查看您桌子使用的空間。
如果沒有未使用的空間,那麼你的數據確實佔用該空間
如果有大量的未使用的空間,你可以嘗試創建一個新的文件組和移動文本/爲varchar(最大值)列到這個新的文件組,並縮小數據庫DBCC SHRINKDB
之後,您的主文件組將佔用較少的空間,並且您可以使用DBCC SHRINKFILE
收縮「違規」文件,每當問題出現時。
創建一個新的文件組可以通過SSMS在數據庫屬性,文件頁面中完成。您可以從那裏生成sql腳本以查看發生了什麼。
將文本列移動到不同的文件組可以通過使用TEXTIMAGE_ON {filegroup | 「default」}在CREATE TABLE
對不起:沒有alter table可能,沒有單個列到不同的文件組,但是所有的「大」列一次。所以你必須手工完成或者在一個新的數據庫圖表(在SSMS工作室中)中顯示你的表格並更改屬性......對不起,我不知道它的名字,就像「文本/圖像文件組」(我想,我有西班牙語SSMS),但是當你在數據庫圖表設計器中看到表格屬性時,它就在那裏。
優點:減少主表上的碎片,更快的表格/聚簇索引,以及只收縮您感興趣的文件的可能性:帶有問題的「大」列。
是的,桌子正在佔據那個地方。 你是什麼意思的文件組?你能解釋做什麼? 感謝您的幫助 – 2012-03-23 13:28:47
我編輯了我的答案,表明您必須這樣做。 – JotaBe 2012-03-23 14:28:55
varchar(max)與varchr(n)不同;
varchar(max)單元格可以包含2 GB的數據。
但是對於varchar(n):n的最大數量是8000,意味着最大8 KB數據。
但是,無論如何,我不知道你在數據庫中存儲了什麼樣的數據。
所以,總之,可能正常。
看看他的評論:每行4到50kb的文本...應該不會加起來1Gb。 – JotaBe 2012-03-23 12:27:16
@JotaBe奇怪。如果每行50KB,1000行應該是50MB。所以也許一些行有更大的數據 – 2012-03-29 11:48:33
佔據你確定它是'varchar'而不是'char'? – 2012-03-23 10:53:14
這取決於每個記錄有多少。如果每個數據平均包含1MB數據,那麼其中1000個將佔用1GB。 – 2012-03-23 10:54:43
我想你是問連續4個解釋點是否正常......不是。 (另外,使用varchar而不是char或text) – Hogan 2012-03-23 11:08:50