T-SQL like charindex patindex 性能比较
事实上在网上可以找到很多这方面的资料,在这边就不多说了~主要观点在性能方面还是比较倾向于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 性能比较的更多相关文章
- SQL Server添加MDW性能监控报表(转载)
10.2 Data Collector与MDW Data Collection功能是SQL SERVER 2005版本提供的数据库监控报表的功能,通过定时地对数据库的语句运行情况,服务器各种资源的监控 ...
- 新 Azure SQL 数据库服务等级的性能
4 月 24 日,我们发布了 SQL Database 基本级(预览版)和标准级(预览版)新服务等级的预览版以及新的业务连续性功能.在本博客文章中,我们将深入探究 SQL Database 中新等级的 ...
- SQL Server-聚焦存储过程性能优化、数据压缩和页压缩提高IO性能(一)
前言 关于SQL Server基础系列尚未结束,还剩下最后一点内容未写,后面会继续.有园友询问我什么时候开始写SQL Server性能系列,估计还得等一段时间,最近工作也比较忙,但是会陆陆续续的更新S ...
- 【原创】分布式之数据库和缓存双写一致性方案解析(三) 前端面试送命题(二)-callback,promise,generator,async-await JS的进阶技巧 前端面试送命题(一)-JS三座大山 Nodejs的运行原理-科普篇 优化设计提高sql类数据库的性能 简单理解token机制
[原创]分布式之数据库和缓存双写一致性方案解析(三) 正文 博主本来觉得,<分布式之数据库和缓存双写一致性方案解析>,一文已经十分清晰.然而这一两天,有人在微信上私聊我,觉得应该要采用 ...
- windows系统与SQL SERVER 2008数据库服务性能监控分析简要
软件系统性能测试体系流程介绍之windows系统与SQL SERVER 2008数据库服务性能监控分析简要 目前大部分测试人员对操作系统资源.中间件.数据库等性能监控分析都是各自分析各自的监控指标方式 ...
- SQL中Charindex和Oracle中对应的函数Instr
转:http://blog.csdn.net/zhuyu19911016520/article/details/8568640 sql :charindex('字符串',字段)>0 charin ...
- sql server charindex函数和patindex函数详解(转)
charindex和patindex函数常常用来在一段字符中搜索字符或字符串.假如被搜索的字符中包含有要搜索的字符,那么这两个函数返回一个非零的整数,这个整数是要搜索的字符在被搜索的字符中的开始位数. ...
- sql中charindex
假如你写过很多程序,你可能偶尔会碰到要确定字符或字符窜串否包含在一段文字中,在这篇文章中,我将讨论使用CHARINDEX和PATINDEX函数来搜索文字列和字符串.我将告诉你这两个函数是如何运转的,解 ...
- Sql中CHARINDEX用法
CHARINDEX作用 写SQL语句我们经常需要判断一个字符串中是否包含另一个字符串,但是SQL SERVER中并没有像C#提供了Contains函数,不过SQL SERVER中提供了一个叫CHAEI ...
随机推荐
- Dalvik源码阅读笔记(一)
dalvik 虚拟机启动入口在 JNI_CreateJavaVM(), 在进行完 JNIEnv 等环境设置后,调用 dvmStartup() 函数进行真正的 DVM 初始化. jint JNI_Cre ...
- i.MX6 设备树 GPIO 默认值
/********************************************************************** * i.MX6 设备树 GPIO 默认值 * 说明: * ...
- 【Leetcode】292. Nim Game
problem 292. Nim Game solution class Solution { public: bool canWinNim(int n) { ; } }; 来generalize一下 ...
- Python中的filter()函数的用法
转载自:脚本之家 Python内建的filter()函数用于过滤序列. 和map()类似,filter()也接收一个函数和一个序列.和map()不同的时,filter()把传入的函数依次作用于每个元素 ...
- 求割点 割边 Tarjan
附上一般讲得不错的博客 https://blog.csdn.net/lw277232240/article/details/73251092 https://www.cnblogs.com/colle ...
- python2.7.9安装mysql-python模块
我使用的系统版本是: SLES12-sp2 使用python连接Mysql数据库,需要安装mysql-python模块: 1. 首先安装pip: 从python官方网站下载get-pipe.py,执行 ...
- 2017年秋软工-PSP总结报告
一.回顾1 回顾本学期第一次作业[https://edu.cnblogs.com/campus/nenu/SWE2017FALL/homework/876]. ==>本学期我的第一次作业博客[h ...
- Project Euler 54
#include<bits/stdc++.h> using namespace std; ]; ]; ; map<char,int> mp; //map<char,cha ...
- c#接口与虚函数的实验报告
1)定义Student类,用string型变量name存储学生姓名,用int型变量age存储学生年龄.Student类实现IComparable接口.要求从键盘输入学生的姓名和年龄,并注意可能出现的异 ...
- xenserver使用快照创建虚拟机,提示eth0 has different mac错误
这个报错的意思就是说mac地址错误 我们对比后可以发现,用快照创建的虚拟机和原虚拟机的eth0那个配置文件的 mac地址是一样的,因为mac地址具有唯一性,所以就报这个错,无法配置ip上网 解决方法很 ...