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秒
在这里插入图片描述
text 类型 用时20.461秒
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值