[英]How to optimize the Join query?
對 SQL 優化此查詢有何建議? 如果我取消“
AND m.matrix_uuid = 98414860655656981
AND c.courses_uuid = 98481529319063564
" 這將需要 1.182 秒,但如果我將這個 where 條件添加到查詢中,它將需要60 秒或更多甚至超時。為什么?
SELECT m.matrix_uuid
, m.name matrix_name
, c.courses_uuid
, c.name courses_name
, e.employees_number
, e.employees_uuid
, CONCAT(e.first_name,' ',e.last_name) Name
, c.validity
, c.duration
, MAX(t.issue_dt) issue_dt
, MAX(t.expiry_dt) expiry_dt
, COUNT(c.courses_uuid) refresher
, c.courses_refresher_uuid
, t.overall_status
, t.status
FROM employees e
left
JOIN courses_taken t
ON t.employees_uuid = e.employees_uuid
LEFT
JOIN courses_schedule s
ON s.courses_schedule_uuid = t.courses_schedule_uuid
LEFT
JOIN matrix_courses mc
ON mc.courses_uuid = s.courses_uuid
JOIN matrix m
ON m.matrix_uuid = mc.matrix_uuid
JOIN courses c
ON c.courses_uuid = mc.courses_uuid
WHERE e.status = 2
AND COALESCE(e.STATUS, 1) != 0
AND m.matrix_uuid = 98414860655656981
AND c.courses_uuid = 98481529319063564
GROUP
BY m.matrix_uuid
, c.courses_uuid
, e.employees_uuid
當WHERE
子句涉及多個表時,無法進行太多優化。 這些索引可能會有所幫助:
m: (matrix_uuid, name)
mc: (courses_uuid, matrix_uuid)
mc: (matrix_uuid, courses_uuid)
s: (courses_uuid, courses_schedule_uuid)
是的,在mc
中的兩個方向,給優化器一個選擇。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.