簡體   English   中英

如何優化 Join 查詢?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM