现在,我们假定没有建立在 EMP ( dept_num )上的索引,也没有建立在 DEPT ( name )上的索引,而存在建立在 EMP ( name )和 DEPT ( num )上的索引。优化器可能按下面的次序进行操作:
利用建立在 EMP ( name )上的索引找到带有 S 的 EMPS
利用建立在 DEPT ( num )上的索引找到匹配项
根据 dept.name = 'IT' 过滤结果
谓词求值的次序是不确定的,可以随时间的改变而改变,并由优化器决定。不要假定任何事情会按一定的次序发生。如果你那么做,随着时间的推移,你的应用程序可能会出现一些看起来非常奇怪的错误。看以下的例子:建立一个表,输入一些数据。当 X='a '时,第二列的数据“ Y ”是一个数值,当 X='b '时,“ Y ”不是数字。
SQL> create table t ( x varchar2(1), y varchar2(1) );