Настройка производительности при соединении двух столбцов таблиц с помощью patindex - PullRequest
0 голосов
/ 05 декабря 2018

Пример данных:

Примечание:

  1. Таблица tbl_test1 является фильтрованной таблицей, может иметь меньше записей на основе ранее отфильтрованных.
  2. просто образец данных для понимания цели.Фактическая таблица tbl_test2 имеет 70 столбцов и 100 миллионов записей.
  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 минут и все еще выполняется для 100 миллионов записей.

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...