開發人員寫了一個view,select要30分鐘,讓我優化下,view如下:
開發人員select一下需要30多分鐘:
21068 rows in set (1987.08 sec)
先解析一下:
mysql> explain SELECT `ol`.`OFFER_ID` AS `OFFER_ID`,`ol`.`EFFECTIVE_DATE` AS `EFFECTIVE_DATE`
看到有 Using filesort,要優化where後面的子判斷,優化如下:
select max(ol2.ID)
有些不對勁,再仔細看了view的結構,恍然大悟:
優化成如下樣子:
CREATE ALGORITHM=UNDEFINED SQL SECURITY DEFINER VIEW view_offer_label AS
執行結果為:
21068 rows in set (0.08 sec)
不到0.08秒,數據完全正確。