【发布时间】:2010-03-22 19:03:27
【问题描述】:
在Oracle(10g)中,当我使用视图(不是物化视图)时,Oracle在执行视图时是否考虑到where子句?
假设我有:
MY_VIEW =
SELECT *
FROM PERSON P, ORDERS O
WHERE P.P_ID = O.P_ID
然后我执行以下操作:
SELECT *
FROM MY_VIEW
WHERE MY_VIEW.P_ID = '1234'
执行此操作时,oracle 是否首先执行视图查询,然后根据我的 where 子句(其中 MY_VIEW.P_ID = '1234')对其进行过滤,还是在执行视图时执行此过滤?如果它不执行后者,并且 P_ID 有索引,我是否也会失去索引功能,因为 Oracle 将针对没有索引的视图而不是具有索引的基表执行我的查询?
【问题讨论】:
-
当您说索引时,您在说哪个索引 1. PERSON 中的 P_ID 2. ORDERS 中的 P_ID 3. MY_VIEW 中的 P_ID .. 我在下面的答案中假设 #3 并且您无法在其上创建索引逻辑观点。你会得到 ORA-01702 错误