Если вы пытаетесь оптимизировать свои данные и знать их, добавление пункта «STRAIGHT_JOIN» может значительно повысить производительность. У вас есть внутреннее соединение ON ... Итак, просто чтобы подтвердить, вам нужны только записи, в которых соединены table1 и table2, но только для идентификатора элемента table 2 = какое-то значение .. в данном случае 4.
Я бы изменил запрос так, чтобы таблица 2 была основной таблицей выбора, поскольку она имеет явный "member_id", который можно оптимизировать с помощью индекса для ограничения строк, а затем присоединить к таблице 1, например
select STRAIGHT_JOIN
t1.*
from
table2 t2,
table1 t1
where
t2.member_id = 4
and t2.col1 = t1.col2
Таким образом, запрос предварительно квалифицирует только записи member_id = 4, а затем совпадет между таблицей 1 и 2. Таким образом, если в таблице 2 было 50 000 записей, а в таблице 1 было 400 000 записей, то первая таблица table2 будет обработана первой. Ограничение ID = 4 еще меньше, и даже меньше, когда присоединено к таблице 1.
Я точно знаю, что прямое соединение работает, так как я реализовал его много раз, имея дело с данными о более чем 14 миллионах записей, соединенных с более чем 15 таблицами поиска, где движок запутался, пытаясь найти для меня критическую таблицу. , Один такой запрос занимал более 24 часов перед зависанием ... Добавление «STRAIGHT_JOIN» и расстановка приоритетов в том, что «первичная» таблица содержала в запросе, отбросило его до окончательного правильного набора результатов менее чем за 2 часа.