SQL性能

SQL性能,sql,Sql,我有数据表,比如 角色定位 合同角色 我只想去拿 RL2 RL3 RL4 所以,我在下面写的查询运行良好,但我怀疑它是否会运行良好。。谢谢你的帮助。谢谢 SELECT RL.ROLE_LOCATION_ID FROM ROLELOCATION RL, contractrole CR WHERE CR.CONTRACT_ROLE_ID = RL.CONTRACT_ROLE_ID AND CR.CONTR_COMPONENT_ID = policy1

我有数据表,比如

角色定位

合同角色

我只想去拿

RL2
RL3
RL4
所以,我在下面写的查询运行良好,但我怀疑它是否会运行良好。。谢谢你的帮助。谢谢

SELECT 
    RL.ROLE_LOCATION_ID 
FROM 
    ROLELOCATION RL, contractrole CR
WHERE 
    CR.CONTRACT_ROLE_ID = RL.CONTRACT_ROLE_ID
    AND CR.CONTR_COMPONENT_ID = policy1
    AND RL.LOCATION_GROUP_ID NOT IN (SELECT RL2.LOCATION_GROUP_ID 
                                     FROM ROLELOCATION RL2,CONTRACTROLE CR2 
                                     WHERE RL2.CONTRACT_ROLE_ID = CR2.CONTRACT_ROLE_ID 
                                     AND CR2.CONTR_COMPONENT_ID <> policy1)

以下是执行查询的方法:

select role_location_id
from (SELECT RL.ROLE_LOCATION_ID,
             sum(case when cr.policy <> 'policy1' then 1 else 0 end) over (partition by rl.location_group_id) as NumNotPolicy1
      FROM ROLELOCATION RL join
           contractrole CR
           on CR.CONTRACT_ROLE_ID = RL.CONTRACT_ROLE_ID
     ) t
where NumNotPolicy1 = 0

这统计非保单1在位置组级别出现的次数。它只选择计数为0的行。

发布包含索引的模式,并发布解释的结果。如果您只是怀疑它是否运行良好。。为什么不测试一下它的性能呢20多年前,ANSI-92 SQL标准已经停止使用老式的逗号分隔表列表样式!您使用的是哪种数据库管理系统?博士后?神谕
SELECT 
    RL.ROLE_LOCATION_ID 
FROM 
    ROLELOCATION RL, contractrole CR
WHERE 
    CR.CONTRACT_ROLE_ID = RL.CONTRACT_ROLE_ID
    AND CR.CONTR_COMPONENT_ID = policy1
    AND RL.LOCATION_GROUP_ID NOT IN (SELECT RL2.LOCATION_GROUP_ID 
                                     FROM ROLELOCATION RL2,CONTRACTROLE CR2 
                                     WHERE RL2.CONTRACT_ROLE_ID = CR2.CONTRACT_ROLE_ID 
                                     AND CR2.CONTR_COMPONENT_ID <> policy1)
select role_location_id
from (SELECT RL.ROLE_LOCATION_ID,
             sum(case when cr.policy <> 'policy1' then 1 else 0 end) over (partition by rl.location_group_id) as NumNotPolicy1
      FROM ROLELOCATION RL join
           contractrole CR
           on CR.CONTRACT_ROLE_ID = RL.CONTRACT_ROLE_ID
     ) t
where NumNotPolicy1 = 0