mysql 8.0 Избегайте использования индекса; Используя временные; Использование сортировки файлов с row_number
У меня есть запрос MySql, который выглядит следующим образом:
SELECT * FROM (
SELECT *
, ROW_NUMBER() over (PARTITION by SCHEMECODE order by SCHEMECODE ,NDATE DESC) as srno
FROM
(
SELECT NH.ADJNAVRS AS NAVRS ,SD.SCHEMECODE AS SCHEMECODE ,NH.NAVDATE as NDATE
,ROW_NUMBER() OVER (PARTITION BY SD.SCHEMECODE, YEAR(NH.NAVDATE), MONTH(NH.NAVDATE) ORDER BY NH.NAVDATE DESC) AS RANK1
FROM ACCORD.SCHEME_DETAILS SD
INNER JOIN ACCORD.NAVHIST NH ON SD.SCHEMECODE=NH.SCHEMECODE
INNER JOIN riasnature SCM ON SCM.ACLASSCODE=SD.CLASSCODE AND SCM.ASSET_CODE=3
left join Accord.SCHEME_DETAILS SD2 on SD2.SCHEMECODE=SD.PRIMARY_FD_CODE
WHERE Sd2.OPT_CODE=1 and Sd2.CLASSCODE=scm.AClasscode
-- GROUP BY SD.SCHEMECODE ,NH.ADJNAVRS ,NH.NAVDATE
) Z
WHERE RANK1 = 1
)C;
Таблица ACCORD.NAVHIST содержит почти 20 миллионов записей.
Когда я объясняю запрос:
Я использую MySQL 8,0 и 128 ГБ MySQL выделенный сервер. конфигурации достаточно для всего параметра. я пробовал desc index также, но это не сработало.
Скажите, пожалуйста, есть ли способ исправить "Использование где; Использование временного; Использование файловой сортировки" и улучшить производительность этого запроса?
Любая помощь?
большое спасибо