为什么包含TABLE和VIEW的SQL命令需要很长时间?

时间:2017-11-21 15:36:56

标签: mysql sql performance

列表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分钟)。

这种运行时间差异的原因是什么?如何避免这种情况?

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)