【mysql】mysql中單列索引、聯合索引、Join聯表查詢建立索引 和 EXPLAIN的分析使用


 

 

2、創建聯合索引,從坐到右分別為:userid、openId、name  

 

 

2、 #### --------------  多表聯合查詢 update 2019/03/13  --------------- ####

(8)在Join表的時候使用相同類型的例,並將其索引

如果你的應用程序有很多 JOIN 查詢,你應該確認兩個表中Join的字段是被建過索引的。這樣,MySQL內部會啟動為你優化Join的SQL語句的機制。

而且,這些被用來Join的字段,應該是相同的類型的。例如:如果你要把 DECIMAL 字段和一個 INT 字段Join在一起,MySQL就無法使用它們的索引。對於那些STRING類型,還需要有相同的字符集才行。(兩個表的字符集有可能不一樣)

//在state中查找company

SELECT company_name FROM users

LEFT JOIN companies ON (users.state = companies.state)

WHERE users.id = $user_id"

//兩個 state 字段應該是被建過索引的,而且應該是相當的類型,相同的字符集

 

 

使用示例:

SQL語句:

EXPLAIN 
    SELECT sl.*,s.student_name,c.course_name,t.term_name,cl.class_name FROM
    cmf_student_score_log sl LEFT JOIN cmf_student s ON s.sno=sl.sno
    LEFT JOIN cmf_class_members cm ON sl.sno=cm.sno                //紅色這兩個是走的 單列sno普通索引
    LEFT JOIN cmf_class cl ON cl.id=cm.class_id
    LEFT JOIN cmf_term t ON t.id=sl.term_id      //橙色這三個是走的id主鍵索引
    LEFT JOIN cmf_course c ON c.id=sl.course_id
    WHERE sl.delete_time is NULL
    AND sl.status=1
    ORDER BY sl.term_id DESC,sl.sno ASC
;

  結語:加上索引后,性能提升18倍。 0.018s ---> 0.001s

  #### --------------  多表聯合查詢 update 2019/03/13  --------------- ####

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM