有幾件事情可以做,以優化此查詢。
在查詢方面:
避免調用上潛在的索引列功能 - 因爲它不會讓MySQL使用索引該列。以下條件:
DATE_FORMAT(today_end_date,'%Y-%m-%d')='2017-05-05'
可以被修飾以這一個,以避免使用索引列上的所述DATE_FORMAT功能,而是僅使用功能上的恆定值:
today_end_date >= DATE('2017-05-05') AND today_end_date < (DATE('2017-05-05') + INTERVAL 1 DAY)
====
請勿在查詢中使用OFFSET值 - 您可以使用faster pagination with offset in MySQL的替代方法,而不是LIMIT X,Y。
===
避免選擇不使用的列 - 在大多數情況下,選擇使用「*」操作符會導致性能問題,因爲你獲取更多的信息比實際需要的所有列。考慮在結果集中實際需要哪些列並獲取它們。
===
使用數值在適當的時候 - 當數字列比較字符串,你迫使MySQL來從數轉換列的值,每行一個字符串,然後才執行比較。因此,在條件today_end = '1',如果today_end數值列,所述條件應該是:
today_end = 1
代替:
today_end = '1'
===
此外,如果你可以提供模式結構,這將有可能爲這種情況推薦適當的索引。
順便說一句,我得到了online MySQL query optimizer的建議,所以請隨時輸入您的查詢和架構,並獲得索引建議。
https://tools.percona.com/query-advisor/PTBJITIG/advise粘貼查詢這裏得到一些整體的想法和優化技巧 – Ognj3n