一般我们模糊查询是用like
select * from 表 where 列 like '';
但是在数据量很大的时候用like查询会显得很慢。
在sqlserver中
使用charindex函数会不会使查询变得快些呢?我们来试一试
select * from 表 where CHARINDEX('',列)>0;
oracle中
select * from 表 where INSTR(列,'')>0;
下面我们在sqlserver中实验一下:
1、写个存储过程插入100万条相同数据:
CREATE PROCEDURE insert10000Demo1
@a int,
@b int
AS
set @a = 1;
set @b = 0;
while @a<=1000000
BEGIN
set @b += @a;
set @a +=1;
insert into txtDemo(id,txt) values(@a,'内容随意');
END
2、执行以下存储过程:
exec insert10000Demo1 1,0;
3、查询10万条数据对比
(1)like:
select top 100000 * from txtDemo where txt like '%内容随意%';
所需时间8秒
(2)CHARINDEX:
select top 100000 * from txtDemo where CHARINDEX('内容随意',txt)>0;
所需时间5秒
4、查询20万条数据对比
(1)like:
select top 200000 * from txtDemo where txt like '%内容随意%';
所需时间12秒
(2)CHARINDEX:
select top 200000 * from txtDemo where CHARINDEX('内容随意',txt)>0;
所需时间12秒
5、查询30万条数据对比
(1)like:
select top 300000 * from txtDemo where txt like '%内容随意%';
所需时间18秒
(2)CHARINDEX:
select top 300000 * from txtDemo where CHARINDEX('内容随意',txt)>0;
所需时间17秒
总结:
爱用哪个用哪个/笑脸。可能是在某个数据量的时候是相等的。在这个数据之前是like慢些,在这个数据之后是like快些。
测评结束。