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