Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MySQL > Оптимизация OR при JOIN


Автор: maxipub 4.1.2019, 18:53
Здравствуйте!

Подобный запрос:
Код
SELECT * FROM t1 LEFT JOIN t2 ON (t2.id=t1.id OR t2.sub_id=t1.sub_id)


Будет выполняться долго даже на небольших таблицах из-за того, что индексы не будут использованы. Насколько я знаю, там есть какие-то проблемы с индексами при OR.

Это можно как-то решить кроме как переделками вида:

Код
SELECT * FROM t1 LEFT JOIN t2 t21 ON (t21.id=t1.id) LEFT JOIN t2 t22 ON (t22.sub_id=t1.sub_id)


?

Спасибо!

Автор: Akina 4.1.2019, 23:08
Цитата(maxipub @  4.1.2019,  19:53 Найти цитируемый пост)
Насколько я знаю, там есть какие-то проблемы с индексами при OR.

Они есть везде. 

Цитата(maxipub @  4.1.2019,  19:53 Найти цитируемый пост)
Это можно как-то решить кроме как переделками вида

Эта "переделка" задачу не решит.

В зависимости от структуры хранения и статистики данных возможны разные "заменители". Большинство - это различные UNION.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)