解決方法:
關聯的字段建索引。
具體分析如下:
舉例:
表格:培訓學生表,班級報名表
需求:查詢出學生報了哪些班級
兩表有個關聯字段“CD”(學生學號)。
視圖sql:
SELECT`t_px_stu`.`PX_STU_PK` AS `PX_STU_PK`,`t_px_stu`.`SYS_USER_PK` AS `SYS_USER_PK`,`t_px_stu`.`CD` AS `CD`,`t_px_stu`.`NM` AS `NM`,`t_px_stu`.`MOB` AS `MOB`,`t_px_stu`.`PHONE` AS `PHONE`,`t_px_stu`.`KINS_PHONE` AS `KINS_PHONE`,`t_px_stu`.`SEX` AS `SEX`,`t_px_stu`.`AGE` AS `AGE`,`t_px_stu`.`ADDRESS` AS `ADDRESS`,`t_px_stu`.`ID_CARD` AS `ID_CARD`,`t_px_stu`.`POLI_CD` AS `POLI_CD`,`t_px_stu`.`POLI_NM` AS `POLI_NM`,`t_px_stu`.`EDU_CD` AS `EDU_CD`,`t_px_stu`.`EDU_NM` AS `EDU_NM`,`t_px_stu`.`NATU_CD` AS `NATU_CD`,`t_px_stu`.`NATU_NM` AS `NATU_NM`,`t_px_stu`.`IMG_URL` AS `IMG_URL`,`t_px_stu`.`RMKS` AS `RMKS`,`t_px_stu`.`CAT_CD` AS `CAT_CD`,`t_px_stu`.`CAT_NM` AS `CAT_NM`,`t_px_stu`.`STAT_CD` AS `STAT_CD`,`t_px_stu`.`STAT_NM` AS `STAT_NM`,`t_px_stu`.`CRT_TM` AS `CRT_TM`,`t_px_stu`.`CRT_BY` AS `CRT_BY`,`t_px_stu`.`UPD_TM` AS `UPD_TM`,`t_px_stu`.`UPD_BY` AS `UPD_BY`,`t_px_stu`.`EDIT_FLAG` AS `EDIT_FLAG`,`t_px_clazz_apply`.`ARG1` AS `ARG1`
FROM`t_px_stu` LEFT JOIN `t_px_clazz_apply` ON`t_px_stu`.`CD` =`t_px_clazz_apply`.`CD`ORDER BY`t_px_stu`.`CRT_TM` DESC
執行時間:37.621秒
查看sql解析
t_px_stu表查詢了6167次,這是沒辦法的,它是主表,需要逐條去查。
t_px_clazz_apply 查詢了22127次,這是需要優化的。這張表總共才22458行,優化的地方找到了。
優化方法:
給t_px_clazz_apply 的cd字段建索引。
create index t_px_clazz_apply_cd_index on t_px_clazz_apply(cd);
再執行,執行時間:0.187秒
查看sql解析:
t_px_stu表查詢了6167次,這是沒辦法的,它是主表,需要逐條去查。
t_px_clazz_apply 查詢了3次,索引起作用了。