我们正在查询数据库以填充一些记录的票证,但是查询形成了上述问题,并由我们的性能团队进行了沟通。
现在我正在学习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条答案
按热度按时间b5lpy0ml1#
在表SERVICE_REQ的SR_COBRAND_ID和SERVICE_REQ_ID列上创建复合索引
--在服务请求(SR_COBRAND_ID,服务请求ID)上创建索引[索引名];
waxmsbnn2#
只是一个建议:不应使用旧的隐式连接语法,而应使用显式连接语法:
无论如何,基于这个条件,您在表之间没有笛卡尔积,而是SERVICE_REQ与SR_COBRAND_DATA和SR_ASSIGNEE_INFO的左连接,通过与REPOSITORY的内连接来减少。
也许为了解释你的目标,你应该添加适当的样本数据,预期的结果,和你的实际结果。