Oracle 执行计划中的 Access 和 Filter 谓词有什么区别?如果我理解正确,“访问”用于确定需要读取哪些数据块,并在读取块后应用“过滤器”。因此,过滤是“邪恶的”。
在下面执行计划的谓词信息部分的示例中:
10 - access("DOMAIN_CODE"='BLCOLLSTS' AND "CURRENT_VERSION_IND"='Y')
filter("CURRENT_VERSION_IND"='Y')
为什么在访问和过滤部分都重复“CURRENT_VERSION_IND”?
对应的操作是对索引的INDEX RANGE扫描,它是在字段(DOMAIN_CODE、CODE_VALUE、CURRENT_VERSION_IND、DECODE_DISPLAY)上定义的。
我的猜测是因为 CURRENT_VERSION_IND 不是索引中的第二列,所以 Oracle 在 Access 阶段无法使用它。因此,它通过 DOMAIN_CODE 列访问索引,获取所有块,然后通过 CURRENT_VERSION_IND 过滤它们。我对吗?