列表T
包含T_INDEX
列(唯一),T_LENGTH
以及列V
的视图T_INDEX
(非唯一),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]
上的条件具有至少一个匹配元素,则它是快速的(<1秒)。但是,如果两个条件没有匹配元素,则需要很长时间(> 2分钟)。
这种运行时间差异的原因是什么?如何避免这种情况?
答案 0 :(得分:0)
试试这个:
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)
答案 1 :(得分:0)
由于你的子查询,性能很差,试试这个:
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)