Производительность: левое JOIN с условием соединения IS NULL в SQLite

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 секунды. Как сделать запрос быстрее? Это похоже на этот случай Медленный запрос с левым внешним соединением и является нулевым условием, но разница в том, что в его случае соединение на самом деле не требовалось, поскольку он использовал только столбцы из Dummy, а не из data_stream_2. Мне нужны столбцы из обоих.


person user584263    schedule 01.07.2016    source источник
comment
Можете ли вы показать нам некоторые образцы данных? Можете ли вы отличить NULL, возникающее из-за отсутствия соответствия в объединении, от фактического значения NULL?   -  person Tim Biegeleisen    schedule 01.07.2016
comment
Вы уверены, что правильно сравниваете производительность? Например, пытались ли вы выполнить каждый запрос несколько раз в разном порядке. Возможно, вы ищете не в том месте.   -  person Thinkeye    schedule 01.07.2016
comment
Да, я уверен. SQLite Manager показывает время в секундах   -  person user584263    schedule 04.07.2016


Ответы (1)