select *
from Dummy LEFT JOIN data_stream_2
ON ((Dummy.id_2=data_stream_2.id_2) OR
(Dummy.id_2 IS NULL and data_stream_2.id_2 IS NULL))
此查询需要26秒。我删除IS NULL检查的那一刻,即
select *
from Dummy LEFT JOIN data_stream_2
ON ((Dummy.id_2=data_stream_2.id_2))
只需1.3秒。 如何更快地进行查询? 我们类似于这种情况Slow query with left outer join and is null condition但不同之处在于他的情况并非真正需要加入,因为他只使用Dummy中的列而不是data_stream_2中的列。我需要两个列。
答案 0 :(得分:0)
在一般情况下,您可以将OR的两个部分分成compound query的两个部分:
SELECT *
FROM Dummy
LEFT JOIN data_stream_2
ON Dummy.id_2 = data_stream_2.id_2
UNION ALL
SELECT *
FROM Dummy
JOIN data_stream_2
ON Dummy.id_2 IS NULL AND data_stream_2.id_2 IS NULL;
但是,SQLite的IS运算符可以在任何一方使用任意表达式,并支持索引优化,因此您只需使用它来比较ID:
SELECT *
FROM Dummy
LEFT JOIN data_stream_2
ON Dummy.id_2 IS data_stream_2.id_2;