【发布时间】:2017-06-24 19:51:44
【问题描述】:
我有一个简单的查询,所有连接的列都被索引,但我仍然收到全表扫描 以下是查询
select rsb.REP_STATUS_BRIDGE_ID
from REP_STATUS_BRIDGE_DETAILS rsd,
rep_status_bridge rsb
where rsd.REP_STATUS_BRIDGE_ID = rsb.REP_STATUS_BRIDGE_ID;
列 REP_STATUS_BRIDGE_ID 在两个表中都有索引,以下是解释计划
Explain plan at the following link
请帮我解决这个问题
正如许多人所问的那样,这是一个需要永远加载的查询
select count(rsb.REP_STATUS_BRIDGE_ID) from
pcfc_dba.rep_pass rp,
pcfc_dba.rep_status_bridge rsb,
pcfc_dba.REP_STATUS_BRIDGE_DETAILS rsd,
pcfc_dba.rep_status_ref rsf
where trunc(rp.APPR_ACTION_END_DATE)>=to_date('01/02/2017','dd/MM/yyyy')
and trunc(rp.APPR_ACTION_END_DATE)<=to_date('06/02/2107','dd/MM/yyyy')
and rp.REP_STATUS_BRIDGE_ID = rsb.REP_STATUS_BRIDGE_ID
and rsb.REP_STATUS_BRIDGE_ID=rsd.REP_STATUS_BRIDGE_ID
and rsf.REP_STATUS_REF_ID=rsd.REP_STATUS_REF_ID;
【问题讨论】:
-
由于没有单一的ID条件,所以会从头到尾读取一张表,索引搜索另一张表。
-
为什么加入?为什么不使用存在?此外,现在遗留的连接语法很糟糕
-
这在我看来是一个合理的执行计划。你有性能问题吗?如果有,你能列举出来吗?
-
您确定该列已在 DETAILS 表中建立索引吗?是否也标记为 FK 指向另一张表?您报告的内容确实很奇怪;我会首先仔细检查这些列是否真的被索引(而不是仅仅相信或“知道”它们是)。
-
陈旧的统计数据?
标签: sql oracle performance oracle11g