有一个带有列T_INDEX
( unique )的表T
,T_LENGTH
和带有列T_INDEX
( non-Unique )的视图V
,V_LENGTH
。它们由T_INDEX
链接。以下命令查找特定长度的元素:
[1] select T_INDEX
[2] from T where
[3] (T_LENGTH>=0 and T_LENGTH<=10)
[4] or
[5] T_INDEX in (select T_INDEX from V where V_LENGTH>=0 and V_LENGTH<=10)
如果在线[3]
的条件和线路[5]
的条件至少具有一个匹配元素,则它是快速(&lt; 1秒)。但是,如果两个条件没有匹配元素,则需要很长的时间(> 2分钟)。
这种运行时间差异的原因是什么?如何避免?
由于您的子查询,性能是不好的,请尝试以下操作:
SELECT_INDEX
FROM T
LEFT JOIN V ON V.T_INDEX = T.T_INDEX
WHERE
(T_LENGTH>=0 and T_LENGTH<=10 AND V.T_INDEX IS NULL)
OR
(V_LENGTH>=0 and V_LENGTH<=10 AND V.T_INDEX IS NOT NULL)
尝试以下:
select T_INDEX
from T left outer join V on T.T_INDEX = V.T_INDEX and V_LENGTH>=0 and V_LENGTH<=10 where
(T_LENGTH>=0 and T_LENGTH<=10)