[英]At what point does it become more efficient to use a text field than an nvarchar field in SQL Server?
在SQL Server中使用文本字段更好之前,nvarchar字段需要保留多長時間? 使用一種或另一種用於可能被查詢或可能不會被查詢的文本內容的一般指示是什么?
據我了解,在SQL 2005+中絕對不應使用TEXT
數據類型。 您應該改為使用VARCHAR(MAX)
。
見這個問題有關VARCHAR(MAX)
與TEXT
。
更新 (每條評論):
該博客在解釋優勢方面做得很好。 取自:
但是,在嘗試對文本進行查詢時會遇到使用類型文本帶來的痛苦。 例如,無法按文本類型分組。
使用文本類型的另一個缺點是磁盤IO增加,原因是每個記錄現在都指向一個Blob(或文件)。
因此,基本上, VARCHAR(MAX)
將數據保留在記錄中,並使您能夠像對待其他VARCHAR
類型一樣對待數據,例如使用GROUP BY
和字符串函數( LEN
, CHARINDEX
等)。
對於TEXT
,您幾乎總是必須將其轉換為VARCHAR
才能對其使用函數。
但是回到您關於效率的問題的根源,我認為使用TEXT
與VARCHAR(MAX)
效率沒有任何提高。 查看此MSDN文章 (搜索“數據類型”),不贊成使用TEXT
,而應將其替換為VARCHAR(MAX)。
首先,根本不使用文本。 MSDN說:
在將來的Microsoft SQL Server版本中,將刪除ntext,text和image數據類型。 避免在新的開發工作中使用這些數據類型,並計划修改當前使用它們的應用程序。 請改用nvarchar(max),varchar(max)和varbinary(max)。
varchar(max)是您可能需要的。
如果比較varchar(n)和varchar(max),從技術上講,這是兩種不同的數據類型(存儲方式不同):
varchar(n)值始終存儲在行內部。 這意味着它不能大於最大行大小,並且行不能大於頁面大小,即8K。
varchar(max)存儲的行超出了行的大小。 行有一個指向單獨的BLOB頁的指針。 但是,在某些情況下,varchar(max)可以將數據存儲為常規行,顯然,它至少應適合行大小。
因此,如果您的行可能大於8K,則必須使用varchar(max)。 如果不是這樣,則使用varchar(n)可能更可取,因為與從外部頁面檢索行內數據相比,檢索速度更快。
MSDN說 :
當列數據條目的大小相差很大,並且大小可能超過8,000個字節時,請使用varchar(max)。
與TEXT相比,VARCHAR的主要優點是可以在其上運行字符串操作和字符串函數。 使用VARCHAR(max),現在您基本上有了一個了不起的大(無限制)變量,您可以根據需要操作它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.