【发布时间】:2021-02-15 03:27:48
【问题描述】:
我有一个 Mysql View,它运行大约 9 秒。我真的需要提高这个视图的性能。这是我的代码:
SELECT
`tad`.`TRIP_ASSIGNMENT_DETAILS_ID` AS `TRIP_ASSIGNMENT_DETAILS_ID`,
`lvdu`.`USERNAME` AS `USERNAME`,
`cdm`.`DOMICILE_LOOK_UP_ID` AS `DOMICILE_LOOK_UP_ID`,
CAST(
GROUP_CONCAT(
DISTINCT `ptlm`.`LOAD_ID` SEPARATOR ','
) AS CHAR(255) CHARSET utf8mb4
) AS `LOAD_RELATED`,
MIN(`ptlm`.`PLANNED_START_DATETIME`) AS `PLANNED_START_DATETIME`
FROM
`Appian`.`LDA_TRIP_ASSIGNMENT_DETAILS` `tad`
LEFT JOIN `Appian`.`LDA_VIEW_DRIVER_AND_USER_DETAILS` `lvdu`
ON
(
`tad`.`DRIVER_DETAILS_ID` = `lvdu`.`DRIVER_DETAILS_ID`
)
LEFT JOIN `Appian`.`LDA_VIEW_CARRIER_DOMICILE_MAPPING` `cdm`
ON
(
`lvdu`.`CARRIER_LOOK_UP_ID` = `cdm`.`CARRIER_LOOK_UP_ID`
)
LEFT JOIN `Appian`.`LDA_POD_TRIP_LOAD_MAPPING` `ptlm`
ON
(
`tad`.`TRIP_ASSIGNMENT_DETAILS_ID` = `ptlm`.`TRIP_ASSIGNMENT_ID`
)
WHERE
`tad`.`TRIP_STATUS` IN('Force De-Assigned', 'Completed') AND `tad`.`TRIP_ASSIGNED_TIME` > CURRENT_TIMESTAMP() - INTERVAL 10 DAY
GROUP BY
`tad`.`TRIP_ASSIGNMENT_DETAILS_ID`
ORDER BY
`tad`.`TRIP_ASSIGNMENT_DETAILS_ID`
DESC
查看LDA_VIEW_DRIVER_AND_USER_DETAILS(1329行)和LDA_VIEW_CARRIER_DOMICILE_MAPPING(216行)性能相当不错,仅需0.01秒。但是一旦我运行这个查询,它大约需要 9 秒。
LDA_TRIP_ASSIGNMENT_DETAILS:只有 19401 行
LDA_POD_TRIP_LOAD_MAPPING:只有 11056 行
TRIP_ASSIGNMENT_DETAILS_ID 是 LDA_TRIP_ASSIGNMENT_DETAILS
的主键LDA_POD_TRIP_LOAD_MAPPING 表没有索引。
请给我一些解决这个问题的提示,
我将不胜感激!!!!
【问题讨论】:
-
如果您需要更多详细信息,请告诉我,谢谢!
-
在 MySQL 中针对视图的查询不能使用索引,所以性能总是会受到影响
-
至于更多细节,以及所有相关表的 SHOW CREATE TABLE 语句,关于查询性能的问题总是需要对给定查询的 EXPLAIN。
标签: mysql view query-optimization