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