Код: Выделить всё
SELECT tt.trans_type_name AS transaction_type,
trans.transaction_time,
a.trans_action_name AS transaction_action_name,
trans.transaction_notes
FROM(SELECT Cast(added_on AS CHAR) AS transaction_time,
notes AS transaction_notes,
trans_type_id AS trans_type,
trans_action_id AS action_id
FROM transactions
WHERE added_by = 'service_app'
AND notes LIKE %(domain)s
AND added_on BETWEEN %(transactionstartdate)s
AND %(transactionenddate)s) trans
LEFT JOIN transaction_types tt
ON trans.trans_type = tt.trans_type_id
LEFT JOIN transaction_actions a
ON trans.action_id = a.trans_action_id
ORDER BY trans.transaction_time DESC
Выбор SELECT будет проверять более MAX_JOIN_SIZE строк; проверьте WHERE и используйте SET SQL_BIG_SELECTS=1 или SET MAX_JOIN_SIZE=#, если SELECT в порядке.
Новый запрос (написанный выше) работает быстрее, но я все еще получаю ошибку MAX_JOIN. Дело в том, что я не могу установить SET SQL_BIG_SELECTS=1. Я хочу сначала оценить подзапрос, потому что для значений, которые я подключаю, есть только 3 строки. Соединение должно происходить только для трех строк, поскольку оно просто заменяет идентификатор соответствующим значением.
Есть ли способ? Заранее спасибо.
Изменить:
Больше ясности — 3 таблицы: транзакции, transaction_types и transaction_actions.
Базовая таблица — это транзакции, содержащая более миллиона строк. У него есть два идентификатора, которые ссылаются на две другие таблицы. Я хочу выбрать имена вместо идентификаторов, поэтому присоединяюсь к ним.
Подробнее здесь: https://stackoverflow.com/questions/798 ... uery-first
Мобильная версия