先上结论:会影响查询性能 我在库里找了一张表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
然后搞俩个相同的查询,执行了多次 都是text 类型 更耗时修改字段类型语法范例 alter table 表名 alter column 字段名 变更后的字段类型。
–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秒
文章图片
text 类型 用时20.461秒
文章图片
推荐阅读
- java|Redis未授权访问的三种利用方式
- 笔记|MySQL的增删查改【进阶】
- SQL|[SQL] MySQL的增删查改(进阶版)
- java|分布式锁简单入门以及三种实现方式介绍
- 机器学习|神经网络(六)循环神经网络
- 机器学习|神经网络(八)注意力机制与外部记忆
- 运维|redis哨兵机制
- java|使用maven创建web项目
- 数据库|什么是“根创新”(从公交支付用上国产数据库说起)