LIKE查询优化之CHARINDEX(sqlserver中函数)和INSTR(oracle中函数)

一般我们模糊查询是用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快些。

测评结束。

注意:在大批量插数据时要把使索引失效,插入完后再使索引有效。

猜你喜欢

转载自blog.csdn.net/qq_29495141/article/details/82350844