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 также, но это не сработало.

Скажите, пожалуйста, есть ли способ исправить "Использование где; Использование временного; Использование файловой сортировки" и улучшить производительность этого запроса?

Любая помощь?

большое спасибо

0 ответов

Другие вопросы по тегам