重写Oracle SQL自连接查询

问题描述 投票:0回答:1

我在USER表中有以下用户和网络信息。我想获取给定NetworkID的所有用户。

ID  Name        Value      Owner
1   UserID      123        111
2   NetworkID   567        111
3   FName       ABC        111
4   LName       BCD        111
5   UserID      234        222
6   NetworkID   567        222
7   FName       DEF        222
8   LName       EFG        222
9   UserID      345        333
10  NetworkID   567        333
11  FName       GHI        333
12  LName       HIJ        333

下面是自连接查询,我已经写好以达到预期的结果集

select distinct U1.value NetworkID
              , U2.value Users
from User U1
join User U2 on U2.owner = U1.owner and U2.name = 'UserID'
where U1.name = 'NetworkID' and U1.value = '567'

预期结果

NetworkID   Users
567         123
567         234
567         345

该表的容量很大,使用此自连接获取结果要花费很长时间。基于数据库限制,我无法更改现有架构(添加索引)。我需要有关如何有效重写此查询以实现相同结果集的建议。

sql oracle optimization self-join
1个回答
0
投票

您的查询很好:

select U1.value as NetworkID, U2.value Users
from User U1 join
     User U2
     on U2.owner = U1.owner and U2.name = 'UserID'
where U1.name = 'NetworkID' and U1.value = '567';

对于此查询,您希望在(owner, name)(name, value, owner)上建立索引。

© www.soinside.com 2019 - 2024. All rights reserved.