1. 程式人生 > 其它 >記錄一下 一個複雜SQL的執行效率分析

記錄一下 一個複雜SQL的執行效率分析

SQL 通過getlastSQL 獲取到SQL

SELECT a.id as aid,`a`.`username`,`a`.`phone`,a.college as a_college,a.school as a_school,a.major as a_major,

`a`.`area_id`,`a`.`teach_center_id`,`a`.`class_id`,a.teacher_id as ateacher_id,`a`.`year`,`a`.`product_type_id`,

`a`.`choose_status`,`a`.`equip_status`,`b`.*,`c`.`special_change_num`,`c`.`apply_status`,c.operator as c_operator,

c.create_time as c_create_time,c.id as cid,`c`.`applicant`,`c`.`special_teacher_id`,`c`.`apply_area_id`,`c`.`out_money`,

c.update_time as c_update_time,c.check_remark as c_check_remark,s.username as sp_name,s.area_id as sp_area_id,

m.name as follow_teacher,`n`.`equip_area_id`,`n`.`equip_manager`,n.operator as mark_operator,`n`.`operator_area`,

`n`.`assign_type`,n.remark as mark_remark,`n`.`equip_area_ids_list`,`n`.`is_all_area`,`n`.`sign_service`,

`n`.`sign_service_hours`,n.create_time as mark_create_time

FROM `choose_school` `b`

LEFT JOIN `student` `a` ON `a`.`crm_student_id`=`b`.`crm_student_id`

LEFT JOIN `equip_new` `c` ON `b`.`student_id`=c.student_id and a.equip_status = c.apply_status

LEFT JOIN `special_teacher_new` `s` ON `s`.`id`=`c`.`special_teacher_id`

LEFT JOIN `special_manager` `m` ON `b`.`follow_teacher`=`m`.`id`

LEFT JOIN `no_sp_record` `n` ON `n`.`crm_id`=`b`.`crm_student_id`

WHERE `b`.`status` = '1' AND `a`.`status` = '1' AND `a`.`service_status` = '1'

AND `a`.`choose_status` = '1' AND ( `a`.`area_id` in (1,36) or FIND_IN_SET(1,n.equip_area_ids_list) or n.is_all_area=1 )

AND ( `a`.`area_id` in (1,36) or FIND_IN_SET(36,n.equip_area_ids_list) or n.is_all_area=1 )

GROUP BY `b`.`crm_student_id` ORDER BY `a`.`equip_status` ASC,`b`.`write_time` DESC,`a`.`update_time` DESC

LIMIT 0,10

6個表聯查資料,條件異常複雜;

主要負責點在於 where 條件的組裝和拼接;不同的where 邏輯 ,and 或 or ;

因為執行速度極慢,兩條資料需要大概120秒;

Explain 分析發現 兩個大表均 是全表掃描;未走索引;

一個一個欄位排查,發現遺漏索引的列;新增後:

速度明顯提升;

分析原因:隨著系統越來越 龐大後,表設計欄位也越來越多, 維護起來可能就比較麻煩,系統響應速度慢,就需要具體問題,一步一步排查;

技巧:可以試著一步一步的先去掉 leftjoin 去掉where 去掉排序,一個個的新增和排查,這樣更方便排查問題所在;

文章來源:劉俊濤的部落格 歡迎關注公眾號、留言、評論,一起學習。

__________________________________________________________________________________

若有幫助到您,歡迎點選推薦,您的支援是對我堅持最好的肯定(*^_^*)

耶和華是我的牧者,我必不至缺乏。