SqlServer之like、charindex、patindex
来源:互联网 发布:smtp.qq. 端口号 编辑:程序博客网 时间:2024/04/29 20:31
SqlServer之like、charindex、patindex
1、环境介绍
测试环境 SQL2005
测试数据 200W条
2、环境准备
2.1建表
CREATE TABLE [dbo].[Depratments](
[Dep_id] [int] NOT NULL,
[Dep_name] [varchar](50) COLLATE Chinese_PRC_CI_AS NOT NULL
) ON [PRIMARY]
2.2创建数据
create procedure ins_Depratments
as
declare @n int;
declare @title varchar(30);
set @n =1;
set @title='';
begin
while @n<2000000
begin
-- set @title = (select case when (cast(floor(rand() * 6) as int)) =5 then '部门经理' else '职员'end);
insert into Depratments (Dep_id,Dep_name) values (@n,'开发'+CAST(@n as varchar)) ;
-- insert into employees values (@n,'刘备'+CAST(@n as varchar),'男',@title,
78000,'11110333x'+CAST(@n as varchar),@n,getdate());
set @n=@n+1;
end
end
2.3执行 exec ins_Depratments
3、场景
3.1前后都有百分号的查询
SET STATISTICS IO ON
set statistics time ON
go
select count(*) from depratments where Dep_name like '%开发1000%';
go
select count(*) from depratments where charindex('开发1000',Dep_name)>0;
go
select count(*) from depratments where patindex('%开发1000%',Dep_name)>0;
go
无索引的情况 charindex > patindex > like
CPU 时间 = 4391 毫秒,占用时间 = 5322 毫秒。
CPU 时间 = 3812 毫秒,占用时间 = 4690 毫秒。
CPU 时间 = 4047 毫秒,占用时间 = 5124 毫秒。
带索引的情况 charindex > patindex > like
CPU 时间 = 4297 毫秒,占用时间 = 4535 毫秒。
CPU 时间 = 3844 毫秒,占用时间 = 4024 毫秒。
CPU 时间 = 4219 毫秒,占用时间 = 4351 毫秒。
结论:
当前后都使用百分号的情况(%string%),①charindex性能稍微好点,like、patindex性能相近;②索引在这种情况中失效3.2百分号在后面的查询
SET STATISTICS IO ON
set statistics time ON
go
select count(*) from depratments where Dep_name like '开发1000%';
go
select count(*) from depratments where charindex('开发1000',Dep_name)>0;
go
select count(*) from depratments where patindex('开发1000%',Dep_name)>0;
go
无索引的情况 patindex > like > charindex
CPU 时间 = 844 毫秒,占用时间 = 1465 毫秒。
CPU 时间 = 3875 毫秒,占用时间 = 3914 毫秒。
CPU 时间 = 968 毫秒,占用时间 = 969 毫秒。
带索引的情况 like > patindex > charindex
CPU 时间 = 0 毫秒,占用时间 = 18 毫秒
CPU 时间 = 3766 毫秒,占用时间 = 4026 毫秒。
CPU 时间 = 937 毫秒,占用时间 = 983 毫秒。
结论:
无索引的情况,patindex的性能最佳,是charindex性能的4倍
带索引的情况,like的性能最佳
总结:
①索引只适用于百分号在后面的情况(string%)
②在前后都是百分号的情况下charindex 的性能最佳
③百分号在后面的查询,无索引的情况,patindex的性能最佳
- SqlServer之like、charindex、patindex
- SqlServer之like、charindex、patindex区别及性能分析(转载)
- charindex、PATINDEX
- sql server 中charindex/patindex/like 的比较
- 模糊查询(LIKE)AND (PATINDEX() . CHARINDEX())
- 模糊查询(LIKE)and (PATINDEX() . CHARINDEX())
- 关于字符串查找 charindex ,Patindex 还有一个like
- 模糊查询(LIKE)AND (PATINDEX() . CHARINDEX())
- SQLserver中字符串查找功能patindex和charindex的区别
- SQLserver中字符串查找功能patindex和charindex的区别
- SQLserver中字符串查找功能patindex和charindex的区别
- SQLserver中字符串查找功能patindex和charindex的区别
- patindex与charindex
- patindex与charindex
- 比较 CHARINDEX 和 PATINDEX
- CHARINDEX和PATINDEX详解
- charindex与patindex比较
- CHARINDEX和PATINDEX详解
- android工具集-android安全
- 关于数据库表字段的数据权限设计
- android:windowSoftInputMode属性详解
- 报出主程序网络问题
- 把字符串中相同的字母去重
- SqlServer之like、charindex、patindex
- call_chain & dump_trace
- vs2008_ucos\uCOSII_port\os_cfg.h os_cpu.h os_cpu_c.c[part1]--移植ucosii在VS2008--part2
- Windows下搭建PHP开发环境
- 1575451 - "Conversion from UTF8 to charset failed" error in Dashboard Design or BI Launchpad
- 装饰模式(Decorate Pattern)
- SQL基础:Oracle00-918:未明确定义列的错误
- Sql 约束(1)
- 【谷歌面试题】给出一个数组A,找出一对 (i, j)使得A[i] <= A[j] (i < j)并且j-i最大