事实上在网上可以找到很多这方面的资料,在这边就不多说了~主要观点在性能方面还是比较倾向于charindex,下面就测试下:

测试环境:共50批次,每批次50000数据,测试总共250万数据.

一、like搜索如下:

declare @count int
declare @batch int
declare @totalBatch int
declare @patternArr varchar(1000)
declare @pattern varchar(200)
declare @times int
declare @timediff datetime set @timediff = GETDATE()
set @times = 0
set @count = 50000
set @batch = 1
set @totalBatch = (select max(PostID) from club_Posts) / @count
set @patternArr = '\[contest\]%,%\[flv\]%' print '执行开始!'
while @batch < @totalBatch
begin declare @next int
set @next=1
while @next<=dbo.Get_StrArrayLength(@patternArr,',')
begin
set @pattern = dbo.Get_StrArrayStrOfIndex(@patternArr,',',@next)
update club_Posts set IsAudit=0 where PostID in
(
select PostID from club_Posts with(nolock) where IsActive=1 and (IsAudit=0 or IsAudit is null) and Body like @pattern {escape'\'} and PostID between (@batch-1)*@count and @batch*@count
)
set @times = @times + @@ROWCOUNT
set @next=@next+1
end
set @batch = @batch +1
if @batch > 1 break
end
select '执行完成!'+'成功执行'+cast(@times as varchar(20))+'次' as Success, '用时:' +cast(DATEDIFF(MS, @timediff, GETDATE()) as varchar(30)) +'毫秒' as OverTime

测试结果:--执行完成!成功执行4453次 用时:47233毫秒

declare @count int
declare @batch int
declare @totalBatch int
declare @patternArr varchar(1000)
declare @pattern varchar(200)
declare @times int
declare @timediff datetime set @timediff = GETDATE()
set @times = 0
set @count = 50000
set @batch = 1
set @totalBatch = (select max(PostID) from club_Posts) / @count
--set @patternArr = '\[contest\]%,%\[flv\]%'
set @patternArr = '[contest],[flv]' print '执行开始!'
while @batch < @totalBatch
begin declare @next int
set @next=1
while @next<=dbo.Get_StrArrayLength(@patternArr,',')
begin
set @pattern = dbo.Get_StrArrayStrOfIndex(@patternArr,',',@next)
-- update club_Posts set IsAudit=0 where PostID in
-- (
-- select PostID from club_Posts with(nolock) where IsActive=1 and (IsAudit=0 or IsAudit is null) and Body like @pattern {escape'\'} and PostID between (@batch-1)*@count and @batch*@count
select PostID from club_Posts with(nolock) where IsActive=1 and (IsAudit=0 or IsAudit is null) and charindex(@pattern,Body) > 0 and PostID between (@batch-1)*@count and @batch*@count
-- )
set @times = @times + @@ROWCOUNT
set @next=@next+1
end
set @batch = @batch +1
if @batch > 50 break
end
select '执行完成!'+'成功执行'+cast(@times as varchar(20))+'次' as Success, '用时:' +cast(DATEDIFF(MS, @timediff, GETDATE()) as varchar(30)) +'毫秒' as OverTime

--执行完成!成功执行4511次 用时:67410毫秒

结果还是有点让我吃惊啊,虽然上面有点小差异,而且网上还是有很多观点。

下面我再测试50万数据看看:

--执行完成!成功执行3次    用时:11203毫秒   用时:10610毫秒  (like)

--            用时:10470毫秒   (patindex)
--执行完成!成功执行24次     用时:15226毫秒  用时:15850毫秒  (charindex)

都差不多,不过patindex和charindex稍微优一点,不过差别好像不在。

T-SQL like charindex patindex 性能比较的更多相关文章

  1. SQL Server添加MDW性能监控报表(转载)

    10.2 Data Collector与MDW Data Collection功能是SQL SERVER 2005版本提供的数据库监控报表的功能,通过定时地对数据库的语句运行情况,服务器各种资源的监控 ...

  2. 新 Azure SQL 数据库服务等级的性能

    4 月 24 日,我们发布了 SQL Database 基本级(预览版)和标准级(预览版)新服务等级的预览版以及新的业务连续性功能.在本博客文章中,我们将深入探究 SQL Database 中新等级的 ...

  3. SQL Server-聚焦存储过程性能优化、数据压缩和页压缩提高IO性能(一)

    前言 关于SQL Server基础系列尚未结束,还剩下最后一点内容未写,后面会继续.有园友询问我什么时候开始写SQL Server性能系列,估计还得等一段时间,最近工作也比较忙,但是会陆陆续续的更新S ...

  4. 【原创】分布式之数据库和缓存双写一致性方案解析(三) 前端面试送命题(二)-callback,promise,generator,async-await JS的进阶技巧 前端面试送命题(一)-JS三座大山 Nodejs的运行原理-科普篇 优化设计提高sql类数据库的性能 简单理解token机制

    [原创]分布式之数据库和缓存双写一致性方案解析(三)   正文 博主本来觉得,<分布式之数据库和缓存双写一致性方案解析>,一文已经十分清晰.然而这一两天,有人在微信上私聊我,觉得应该要采用 ...

  5. windows系统与SQL SERVER 2008数据库服务性能监控分析简要

    软件系统性能测试体系流程介绍之windows系统与SQL SERVER 2008数据库服务性能监控分析简要 目前大部分测试人员对操作系统资源.中间件.数据库等性能监控分析都是各自分析各自的监控指标方式 ...

  6. SQL中Charindex和Oracle中对应的函数Instr

    转:http://blog.csdn.net/zhuyu19911016520/article/details/8568640 sql :charindex('字符串',字段)>0 charin ...

  7. sql server charindex函数和patindex函数详解(转)

    charindex和patindex函数常常用来在一段字符中搜索字符或字符串.假如被搜索的字符中包含有要搜索的字符,那么这两个函数返回一个非零的整数,这个整数是要搜索的字符在被搜索的字符中的开始位数. ...

  8. sql中charindex

    假如你写过很多程序,你可能偶尔会碰到要确定字符或字符窜串否包含在一段文字中,在这篇文章中,我将讨论使用CHARINDEX和PATINDEX函数来搜索文字列和字符串.我将告诉你这两个函数是如何运转的,解 ...

  9. Sql中CHARINDEX用法

    CHARINDEX作用 写SQL语句我们经常需要判断一个字符串中是否包含另一个字符串,但是SQL SERVER中并没有像C#提供了Contains函数,不过SQL SERVER中提供了一个叫CHAEI ...

随机推荐

  1. 2.10 select下拉框

    2.10 select下拉框 本篇以百度设置下拉选项框为案例,详细介绍select下拉框相关的操作方法. 一.认识select    1.打开百度-设置-搜索设置界面,如下图所示 2.箭头所指位置,就 ...

  2. 2018上C语言程序设计(高级)作业- 第3次作业

    作业要求一 6-1 输出月份英文名 6-2 查找星期 6-3 计算最长的字符串长度 6-4指定位置输出字符串 6-5奇数值结点链表 6-6学生成绩链表处理 6-7链表拼接 作业要求二 题目6-1输出月 ...

  3. PHP设计模式之工厂模式(转)

    概念 工厂模式是我们最常用的实例化对象模式,是用工厂方法代替new操作的一种模式. 使用工厂模式的好处是,如果你想要更改所实例化的类名等,则只需更改该工厂方法内容即可,不需逐一寻找代码中具体实例化的地 ...

  4. DG备库,实时应用如何判断,MR进程,及MRP应用归档,三种情况的查询及验证

    本篇文档学习,DG备库,实时应用如何判断,MR进程,及MRP应用归档,三种情况的查询及验证 1.取消MRP进程 备库查询进程状态select process,client_process,sequen ...

  5. 安装12C小问题及pdb表空间配置

    安装12C小问题及pdb表空间配置 一.安装 1.RPM包 #安装12C需要安装的rpm包,官网搜索,做个记录 bc binutils-2.23.52.0.1-12.el7(x86_64) compa ...

  6. [LeetCode&Python] Problem 453. Minimum Moves to Equal Array Elements

    Given a non-empty integer array of size n, find the minimum number of moves required to make all arr ...

  7. C#字符串string以及相关内置函数

    C#字符串string函数 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar -- 心分享. ...

  8. IE8的兼容问题

    1: rgba失效的问题: 在添加rgba的类名内加上:filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#7f00000 ...

  9. com.sun.org.apache.xerces.internal.impl.dv.util.Base64出现的问题

    import com.sun.org.apache.xerces.internal.impl.dv.util.Base64; 出现的问题是这个在eclipse中无法使用,解决方法如下: (1)进入ec ...

  10. 实验吧—安全杂项——WP之 女神

    点击链接下载压缩文件解压后得到 打开TXT文档: 能看出是base64,这么长,那就是转成图片喽~ 地址:http://www.vgot.net/test/image2base64.php? 然后就是 ...