使用patindex连接两个表列的性能调优

时间:2018-12-05 12:13:29

标签: sql-server sql-server-2008-r2

样本数据:

注意:

  1. tbl_test1是已过滤的表,基于先前的过滤,记录可能更少。
  2. 以下仅是用于理解目的的数据示例。实际表tbl_test2包含70列和1亿条记录。
  3. WHERE条件是动态的,可以任意组合。
  4. 显示列也是动态的,我的意思是一个或多个列。

    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

0 个答案:

没有答案