sqlsever中text字段类型是否会影响查询性能

先上结论:会影响查询性能

我在库里找了一张表T_Sys_Log 然后做2个副本
//备份表
SELECT * INTO T_Sys_Log_back FROM T_Sys_Log
SELECT * INTO T_Sys_Log_back2 FROM T_Sys_Log_back
这样 T_Sys_Log_back T_Sys_Log_back2 数据内容是一样的 里面有1267963条数据.

如下是表结构

CREATE TABLE [dbo].[T_Sys_Log_back](
	[ID] [INT] IDENTITY(1,1) NOT NULL,
	[logKey] [NVARCHAR](50) NOT NULL,
	[logMessage] [NVARCHAR](MAX) NULL,
	[tdate] [DATETIME] NOT NULL,
	[logTag] [NVARCHAR](50) NULL,
	[logUrl] [NVARCHAR](200) NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO

用sql语句把T_Sys_Log_back2 中的 logUrl 字段改为 TEXT 类型
sqlserver 在1267963条表中把字段类型 nvarchar(200)改 text类型 用时55秒 (这取决服务器性能和数据量)
如果用表[设计]模式 直接就无响应,超时修改失败,推荐用语句修改字段类型
alter table T_Sys_Log_back2 alter column logUrl TEXT

修改字段类型语法范例 alter table 表名 alter column 字段名 变更后的字段类型。

然后搞俩个相同的查询,执行了多次 都是text 类型 更耗时
–nvarchar(200) 用时18秒
SELECT TOP(100) * FROM T_Sys_Log_back WHERE logUrl LIKE ‘%picc%’ ORDER BY id DESC
–text 类型 用时21秒
SELECT TOP(100) * FROM T_Sys_Log_back2 WHERE logUrl LIKE ‘%picc%’ ORDER BY id DESC

每次执行查询语句前都要执行如下语句清空缓存,否则第一次查询18秒,第二查询2秒这缓存下就没法直接检查效果了

--取消查询缓存后
DBCC DROPCLEANBUFFERS;
DBCC FREEPROCCACHE;

nvarchar(200) 用时18秒
sqlsever中text字段类型是否会影响查询性能_第1张图片
text 类型 用时20.461秒
sqlsever中text字段类型是否会影响查询性能_第2张图片

你可能感兴趣的:(优化,数据库,sqlserver)