尝试提高 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';
我有点 "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';