我有很多这样的查询,当我如下运行它们时,它们运行很快。但是,如果我将它们保存到视图中然后运行它们,它们将超时。关于如何优化这样的查询或更快地缩短回退时间的任何想法?最终的结果是让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`
答案 0 :(得分:0)
请考虑使用Option Connections of Nodes:
A:[B1, B2, C]
B:[C, D]
C:[D]
Start at A:(and add to array)
Loop through each possibility: (add to second element of array)
loop through each possibility of A's possibility: (add to third element of array)
...
after reaching D, save array and create next array.
(而不是视图)编写一个STORED PROCEDURE
。然后SELECT
。
同时,其中一些索引可能会有所帮助:
CALL