优化|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;

【优化|sqlsever中text字段类型是否会影响查询性能】nvarchar(200) 用时18秒
优化|sqlsever中text字段类型是否会影响查询性能
文章图片

text 类型 用时20.461秒
优化|sqlsever中text字段类型是否会影响查询性能
文章图片

    推荐阅读