簡體   English   中英

MySQL查詢速度聯接

[英]MySQL Query Speed Joins

有什么方法可以優化以下查詢的速度? 執行大約需要6秒鍾。 每個表僅包含約1000條記錄,因此它並不龐大。

SELECT c. * , q.qualification_name, CONCAT( u.firstname, ' ', u.lastname ) AS name, v.venue_name, v.address_town
FROM p_courses c
LEFT JOIN p_qualifications q ON c.qualification_name = q.ref
LEFT JOIN p_users u ON c.instructor_number = u.instructor_number
LEFT JOIN p_venues v ON c.venue_token = v.token
WHERE (
c.status = 'completed'
OR c.status = 'confirmed'
)

上面的查詢可以工作並根據請求檢索所有數據,只要我添加多個LEFT JOIN,就需要很長時間。

謝謝。

已編輯。

在查詢前面添加EXPLAIN會返回此...

id  select_type table   type    possible_keys   key   key_len   ref     rows    Extra
1   SIMPLE      c       ALL     NULL            NULL  NULL      NULL    1288    Using where
1   SIMPLE      q       ALL     NULL            NULL  NULL      NULL    21   
1   SIMPLE      u       ALL     NULL            NULL  NULL      NULL    518  
1   SIMPLE      v       ALL     NULL            NULL  NULL      NULL    669

抱歉,但我不確定如何解釋。

  1. 通過將EXPLAIN放在查詢前面來檢查問題所在。
  2. 設置索引,以便您的連接以及在哪里可以使用它們。
  3. 檢查你EXPLAIN再次
  4. 泡沫,沖洗,重復。

提示:您可能希望在以下位置建立索引:

c.qualification_name 
q.ref
c.instructor_number 
u.instructor_number
c.venue_token 
v.token
c.status

從您發布的解釋中可以看出,查詢似乎沒有使用索引。 確保索引q.ref,u.instructor_number和v.token

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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