У меня есть запрос, который идет как это:MySQL LEFT JOIN и IS NULL
SELECT *
FROM table_a
LEFT JOIN table_b ON table_a.id_a = table_b.id_a
WHERE
table_b.field = 'something' OR table_b.field IS NULL
я хочу иметь записи с table_b.field = «что-то» или те, где Тереза нет записи в TABLE_B для строка в таблице_a. Когда я добавляю IS NULL, запрос занимает около 60 секунд, чтобы выполнить против 0,4 секунды без него.
любой может объяснить это поведение? Я думаю, что IS NULL отрицает некоторую оптимизацию, но я не совсем уверен.
Фактически ваше левое соединение гарантирует, что вы получите данные, когда они равны нулю. Вам нужно просто переместить table_b.field = 'something' в соединение. –
На самом деле ваше левое соединение гарантирует, что вы получите данные, когда они равны нулю. Вам нужно просто переместить table_b.field = 'something' в соединение. SELECT * FROM TABLE_A LEFT JOIN TABLE_B ON table_a.id_a = table_b.id_a и table_b.field = 'что-то' –
ну да, с индексом он восстанавливает скорость, но я до сих пор не понимаю, почему это происходит – Jarry