尝试提高 SQL 查询中联接的性能

trying to improve performance of a join in SQL query

我有点 "ugly" 的情况,这会显着降低我的查询速度。我有两张桌子要加入...

表 1

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

表 2

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

但是这个查询非常慢。我无法更改表上的索引,但有没有另一种方法可以重写此查询以提高性能。这不是一个完美的情况,但任何改进都会有所帮助。

这是您的查询:

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';