vic*_*cky 10 sql sql-server sql-server-2008
每次我混淆选择varchar(max)或varchar(fix)数据类型.假设我有一个大约5000 varchar的数据列.列不是null类型.
我应该设置varchar(max)not null或varchar(5000)not null.
在可以为空的数据类型的情况下也是如此.
CREATE TABLE [dbo].[tblCmsPages](
[CmsPagesID] [int] IDENTITY(1,1) NOT NULL,
[PageName] [varchar](250) NOT NULL,
[PageContent] [varchar](max) NOT NULL,
[Sorting] [int] NOT NULL,
[IsActive] [bit] NOT NULL)
Run Code Online (Sandbox Code Playgroud)
//要么
CREATE TABLE [dbo].[tblCmsPages](
[CmsPagesID] [int] IDENTITY(1,1) NOT NULL,
[PageName] [varchar](250) NOT NULL,
[PageContent] [varchar](5000) NOT NULL,
[Sorting] [int] NOT NULL,
[IsActive] [bit] NOT NULL
Run Code Online (Sandbox Code Playgroud)
// [PageContent]将是5000个char或单个char或null然后我应该采取什么.
彼此想我想知道.null和not null之间的主要区别是什么.它仅用于验证检查以及对性能的影响.
在声明VARCHAR变量或列时指定长度时,允许的最大长度为 8000.如果长度大于8000,则必须使用说明 MAX符作为长度.如果指定的长度大于8000,将遇到以下错误(假设指定的长度为10000):
给'varchar'类型的大小(10000)超过了任何数据类型允许的最大值(8000).
更新: - 我找到了一个我想分享的链接: -
Varchar[(n)]和之间没有太大的性能差异Varchar(Max).Varchar[(n)]提供更好的性能结果Varchar(Max).如果我们知道要存储在列或变量中的数据小于或等于8000个字符,那么与Varchar(Max)相比,使用此Varchar [(n)]数据类型可提供更好的性能.例如:当我运行下面的时候脚本通过将变量@FirstName类型更改为Varchar(Max)然后为100万个赋值,它始终比我们使用数据类型时花费的时间加倍
Varchar(50) for variable @ FirstName.
DECLARE @FirstName VARCHAR(50), @COUNT INT=0, @StartTime DATETIME = GETDATE()
WHILE(@COUNT < 1000000)
BEGIN
SELECT @FirstName = 'Suraj', @COUNT = @COUNT +1
END
SELECT DATEDIFF(ms,@StartTime,GETDATE()) 'Time Taken in ms'
GO
Run Code Online (Sandbox Code Playgroud)
你对数据有清晰的认识,它不会超过5000,我更喜欢varchar(n)(varchar(5000).
如果您想在varchar(n)和varchar(max)之间进行选择,请注意以下几点:
在适当的地方,使用VARCHAR(n)而不是VARCHAR(MAX)
一个.出于良好设计的原因,如果没有性能优势,
湾 因为VARCHAR(MAX)数据不会压缩
存储大字符串比存储小字符串需要更长的时间.
将行内VARCHAR(MAX)值从低于8,000更新到超过8,000将相对较慢,但单个事务的差异可能无法测量.
将行内VARCHAR(MAX)值从8,000以上更新到8,000以下将比将表设置为在行外存储数据更快.
使用VARCHAR(MAX)的行外选项将导致写入速度变慢,直到字符串很长.