合并具有高成本的笛卡尔联接

时间:2019-02-25 06:52:59

标签: sql database oracle sql-tuning

具有高成本的合并笛卡尔联接。

我们正在查询数据库以填充一些已记录的凭单,但是形成查询导致了上述问题,并且由我们的绩效团队进行了沟通。

在这里,我从事Java编程工作,对这些连接没有太多的了解。有人可以帮我解决一下查询下面的问题,以避免合并具有高成本的笛卡尔联接。

FROM
    SERVICE_REQ SR,
    SR_COBRAND_DATA SR_COB_DATA,
    REPOSITORY rep,
    SR_ASSIGNEE_INFO ASSIGNEE_INFO 
WHERE
    SR.SR_COBRAND_ID=rep.COBRAND_ID 
    AND SR.SERVICE_REQ_ID=SR_COB_DATA.SERVICE_REQ_ID (+) 
    AND SR.SERVICE_REQ_ID = ASSIGNEE_INFO.SERVICE_REQ_ID (+) 
    AND SR.SR_COBRAND_ID = 99  

2 个答案:

答案 0 :(得分:0)

只是一个建议

您不应使用旧的隐式连接sintax,而应使用显式的join sintax

const TitleBar = require('frameless-titlebar');

无论如何,根据此条件,表之间没有笛卡尔积,但是带有SR_COBRAND_DATA和SR_ASSIGNEE_INFO的SERVICE_REQ的左连接减少了与REPOSITORY的内部连接

可能是为了解释您的目标,您应该添加适当的数据样本以获取预期结果和实际结果

答案 1 :(得分:0)

在表SERVICE_REQ的SR_COBRAND_ID和SERVICE_REQ_ID列上创建一个复合索引

-在SERVICE_REQ(SR_COBRAND_ID,SERVICE_REQ_ID)上创建索引[indexname];