Я пытаюсь ускорить запрос MYSQL. В столбце с именем «MISC» мне сначала нужно извлечь переменную «traceID», которая будет использоваться для сопоставления строки другой таблицы. Пример столбца MISC:
PFFCC_Strip/fkk49322/PMethod=Diners/CardType=Diners/9999******9999/2010/TraceId=7122910
Я извлекаю значение "7122910" в качестве traceID и нахожу соответствующую строку с левым соединением. Значение traceId уникально, в каждой таблице должна присутствовать только одна строка.
Я не могу установить индекс в таблицах для ускорения процесса. Любой подход, который мог бы заставить этот запрос работать быстрее? На самом деле, запуск занимает несколько секунд, что невозможно.
select *
from
(select TraceID,PP,UDef2, Payment_Method, Approved, TransactionID, Amount
from pr) pr
left join
(select
PAYMENT_ID as Payment_ID_omega, TRANSACTION_TYPE,
REQUESTED_AMOUNT, AMOUNT, `STATUS` as StatusRef_omega,
REQUEST_DATE, Agent,
if (locate('TraceId=',MISC)>0, SUBSTRING_INDEX(MISC,'TraceId=',-1),'') as traceID
from BankingActivity ) omega
on pr.TraceID = omega.traceID
having
(REQUEST_DATE BETWEEN DATE_ADD(DATE(NOW()), INTERVAL -1 DAY) AND NOW())
ORDER BY pr.TraceID DESC