пытаясь улучшить производительность объединения в запросе SQL - PullRequest
0 голосов
/ 17 марта 2020

У меня какая-то "ужасная" ситуация, и это значительно замедляет мой запрос. У меня есть две таблицы, к которым я пытаюсь присоединиться ...

Table1

ID          Val1          Val2         Data1         Data2
1           123           BAL          Apple         California
2           345           NAL          Microsoft     Washington
3           566           HAO          Google        New York

Table2

ID          Val         Ind          Data     
1           123-BAL       Y            Some value
2           566-HAO       N            Other value

Мой запрос выглядит так:

Select * from Table1 t1 JOIN Table2 t2 on (t1.Val1 + '-' + t1.Val2) = t2.Val and Ind = 'Y'

Желаемый результат:

ID          Val1          Val2         Data1         Data2
1           123           BAL          Apple         California

Но этот запрос очень медленный. Я не могу изменить индексы в таблицах, но есть ли другой способ переписать этот запрос для повышения производительности. Это не идеальная ситуация, но любое улучшение будет полезно.

1 Ответ

1 голос
/ 17 марта 2020

Это ваш запрос:

Select *
from Table1 t1 JOIN
     Table2 t2 
     ON (t1.Val1 + '-' + t1.Val2) = t2.Val and t2.Ind = 'Y';

Я думаю, что это будет использовать индекс на table2(Ind, Val). Но вы также можете попробовать индекс в Table1. Для этого определите вычисляемый столбец, создайте индекс, а затем используйте столбец в запросе:

alter table table1 add val as (t1.Val1 + '-' + t1.Val2) persisted;

create index idx_table1_val on table1(val);
Select *
from Table1 t1 JOIN
     Table2 t2 
     ON t1.Val = t2.Val and t2.Ind = 'Y';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...