样本数据:
注意:
tbl_test1
是已过滤的表,基于先前的过滤,记录可能更少。tbl_test2
包含70列和1亿条记录。WHERE
条件是动态的,可以任意组合。显示列也是动态的,我的意思是一个或多个列。
create table tbl_test1
(
col1 varchar(100)
);
insert into tbl_test1 values('John Mak'),('Omont Boy'),('Will Smith'),('Mak John');
create table tbl_test2
(
col1 varchar(100)
);
insert into tbl_test2 values('John Mak'),('Smith Will'),('Jack Don');
查询1:以下查询耗时10分钟以上,但仍在运行1亿条记录。
select t2.col1
from tbl_test2 t2
inner join tbl_test1 t2 on patindex('%'+t1.col1+'%',t2.col1) > 0
查询2:等待10分钟后,这也使运行无法获得结果。
select t2.col1
from tbl_test2 t2
where exists
(
select * from tbl_test1 t1 where charindex(t1.col1,t2.col1) > 0
)
预期结果:
col1
----------
John Mak
Smith Will