MySQL 5.7 ошибка index_merge_intersection

Я обнаружил, что, как представляется, ошибка в MySQL

http://bugs.mysql.com/bug.php?id=79675

Объяснение и обходной путь:

У меня есть подзапрос EXISTS, который возвращает разные результаты для одних и тех же данных в разных версиях MySQL.

Пример запроса: выберите PCR # 100 и убедитесь, что один из членов экипажа имеет user_id = 10

SELECT *
FROM pcrs
WHERE id = 100
AND EXISTS (
SELECT NULL FROM pcrs p
LEFT OUTER JOIN crews ON crews.pcr_id = p.id
WHERE crews.user_id = 10
AND p.id = pcrs.id
)

В MySQL 5.5 запрос работает правильно и в одну строку (id = 100) возвращается.

В MySQL 5.7 тот же запрос неправильно возвращает никаких результатов.

Интересно, если я изменю внешний WHERE от

WHERE id = 100

в

WHERE id BETWEEN 100 and 101

Тогда MySQL 5.7 правильно возвращает одну строку (id = 100)

При сопоставлении определенного идентификатора строки во внешнем запросе подзапрос EXISTS всегда завершается неудачей (на 5.7, а возможно, и на 5.6)

Эта проблема вызвана / вызвана переключателем оптимизатора MySQL: index_merge_intersection,

Если я изменю этот параметр на OFF:

SET optimizer_switch="index_merge_intersection=off";

запрос работает как ожидалось в 5.7

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector