Методы оптимизации запросов - PullRequest
0 голосов
/ 26 февраля 2020

У меня много подобных запросов, и они выполняются довольно быстро, когда я запускаю их, как показано ниже. Но если я сохраню их в виде, а затем запустите, они истечут. Любые идеи о том, как я могу оптимизировать подобные запросы или сделать время отката быстрее? Конец игры - Microsoft Power BI.

    SELECT 
        `mbol`.`Id` AS `Id`,
        (SELECT 
                `sp_price_sheet`.`NormalizedTotalValue`
            FROM
                ((`mbol` `sp_mbol`
                LEFT JOIN `mbol_price_sheet_xref` `sp_price_sheet_xref` ON ((`sp_mbol`.`Id` = `sp_price_sheet_xref`.`MbolId`)))
                LEFT JOIN `price_sheet` `sp_price_sheet` ON ((`sp_price_sheet_xref`.`PriceSheetId` = `sp_price_sheet`.`Id`)))
            WHERE
                ((`sp_mbol`.`Id` = `mbol`.`Id`)
                    AND (`sp_price_sheet`.`Type` = 'Charge')
                    AND (`sp_price_sheet`.`IsSelected` = '1'))
            ORDER BY `sp_price_sheet`.`UpdateDate` DESC
            LIMIT 1) AS `Actual Carrier Rate`,

            FROM
                ((((`mbol` `psc_mbol`
                LEFT JOIN `mbol_price_sheet_xref` `psc_xref` ON ((`psc_mbol`.`Id` = `psc_xref`.`MbolId`)))
                LEFT JOIN `price_sheet` `psc_price_sheet` ON ((`psc_xref`.`PriceSheetId` = `psc_price_sheet`.`Id`)))
                LEFT JOIN `settlement` `psc_settle` ON ((`psc_price_sheet`.`Id` = `psc_settle`.`PriceSheetId`)))
                LEFT JOIN `check` ON ((`psc_settle`.`CheckId` = `check`.`Id`)))
            WHERE
                ((`psc_mbol`.`Id` = `mbol`.`Id`)
                    AND (`psc_price_sheet`.`Type` = 'Billed'))) AS `Check Date`,
        (SELECT 
                `packnum4_reference`.`Value`
            FROM
                ((`mbol` `packnum4_mbol`
                LEFT JOIN `mbol_reference_xref` `packnum4_xref` ON ((`packnum4_mbol`.`Id` = `packnum4_xref`.`MbolId`)))
                LEFT JOIN `reference` `packnum4_reference` ON ((`packnum4_xref`.`ReferenceId` = `packnum4_reference`.`Id`)))
            WHERE
                ((`packnum4_mbol`.`Id` = `mbol`.`Id`)
                    AND (`packnum4_reference`.`Type` = 'Route Board Id'))
            ORDER BY `packnum4_xref`.`InsertDate` DESC
            LIMIT 1) AS `Route Board Id`,
        (SELECT 
                MAX(`act`.`CompletedDate`)
            FROM
                ((`mbol` `mbolact`
                LEFT JOIN `mbol_activity_xref` `mbolxact` ON ((`mbolact`.`Id` = `mbolxact`.`MbolId`)))
                LEFT JOIN `activity` `act` ON ((`mbolxact`.`ActivityId` = `act`.`Id`)))
            WHERE
                ((`act`.`Type` = 'Issue Log Acct Operations')
                    AND (`mbolact`.`Id` = `mbol`.`Id`))) AS `Issue Log Acct Completed`,
        (SELECT 
                MAX(`act`.`CompletedDate`)
            FROM
                ((`mbol` `mbolact`
                LEFT JOIN `mbol_activity_xref` `mbolxact` ON ((`mbolact`.`Id` = `mbolxact`.`MbolId`)))
                LEFT JOIN `activity` `act` ON ((`mbolxact`.`ActivityId` = `act`.`Id`)))
            WHERE
                ((`act`.`Type` = 'Add Customer Invoice')
                    AND (`mbolact`.`Id` = `mbol`.`Id`))) AS `Invoice Date`

    FROM
        ((((`price_sheet` `psc_price_sheet`
        LEFT JOIN `settlement` ON ((`psc_price_sheet`.`Id` = `settlement`.`PriceSheetId`)))
        LEFT JOIN `check` ON ((`settlement`.`CheckId` = `check`.`Id`)))
        LEFT JOIN `mbol_price_sheet_xref` `psc_xref` ON ((`psc_price_sheet`.`Id` = `psc_xref`.`PriceSheetId`)))
        LEFT JOIN `mbol` ON ((`psc_xref`.`MbolId` = `mbol`.`Id`)))
    WHERE
        ((`mbol`.`Type` = 'Regular')
            AND (`mbol`.`status` = 'Delivered'))
    GROUP BY `mbol`.`Id`

1 Ответ

0 голосов
/ 27 февраля 2020

Попробуйте написать STORED PROCEDURE с SELECT (не представлением). Тогда CALL it.

Между тем, некоторые из этих индексов могут помочь:

mbol:  (status, Type)
psc_xref:  (MbolId, PriceSheetId)
settlement:  (CheckId, PriceSheetId)
act:  (Type, Id, CompletedDate)
mbolxact:  (ActivityId, MbolId)
packnum4_xref:  (ReferenceId, MbolId)
packnum4_reference:  (Type, Id, Value)
psc_settle:  (CheckId, PriceSheetId)
sp_price_sheet:  (IsSelected, Type, Id, NormalizedTotalValue)
sp_price_sheet_xref:  (PriceSheetId, MbolId)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...