mysql - 這條sql可以怎么優化,求幫助
問題描述
select count(*) from trade where shippingtype <> 'free' and status in ('TRADE_FINISHED','WAIT_SELLER_SEND_GOODS') and tosellerreachgoods = 0 and consigntime <1470110400000 and ( endtime >=1469980800000 or endtime is null ) and created >=1469980800000 and created <=1470067200000 and user = 'xxxxxxxxxxxxxxxx' ;
idselect_typetabletypepossible_keyskeykey_lenrefrowsExtra1SIMPLEtraderangetrade__user,trade_user_created,trade_user_buyernick,trade__status_created,trade_user_statustrade_user_created108NULL588Using index condition; Using where問題解答
回答1:盡管從explain結果看這個查詢沒什么特別問題,但以下幾點可以考慮一下。1、shippingtype和status看起來是個枚舉值,可以用tinyint代替(數值查詢比字符串查詢速度要快);2、endtime設為NOT NULL, 把原來的null值用一個特殊值(-1或0)代替,NULL值會影響索引的效率;3、可以的話,用user_id代替user;
個人YY的優化:
SELECT count(*) FROM trade WHERE status IN ('TRADE_FINISHED', 'WAIT_SELLER_SEND_GOODS') AND shippingtype <> 'free'AND tosellerreachgoods = 0 AND user = 'xxxxxxxxxxxxxxxx'AND consigntime < 1470110400000 AND created BETWEEN 1469980800000 AND 1470067200000AND ( endtime >= 1469980800000 OR endtime IS NULL );
前面4個條件沒什么好說的,主要是后面三個條件,分別是consigntime、created和endtime,根據篩選范圍從小到大來排列(具體要看你的表里這三個字段的范圍段)。
部分建議是基于你能修改表結構的基礎上提出的,如果沒有權限的話那就忽略吧。
參考資料:http://tech.meituan.com/mysql...
回答2:Strong
回答3:那個 不等于 影響性能
回答4:從explain上來看沒什么問題
相關文章:
1. css - 新手做響應式布局, 斷點過后右側出現空白,求幫助,謝謝。2. javascript - 求幫助 , ATOM不顯示界面!!!!3. php表單的屬性怎么會出現在表單里面呢 求幫助 謝謝4. python - 用urllib抓取網頁上的下載鏈接,目標文件是xls形式,但發現抓下來的xls是空表,里面只有一句報錯信息,求幫助。5. Help!求幫助6. 新人做網站求幫助7. node.js - npm安裝模塊時,在cmd上顯示的是一條白線,白線前面是一天反斜線轉圈圈,然后就出現npm ERR錯誤了,求幫助,謝謝8. mysql - 優惠券表應該怎么建,求幫助9. 老師你好 請求幫助 在選擇版本和顏色出錯 選擇第二個的時候默認選項顏色不恢復原來的顏色10. node.js - mongoose 查詢數據庫 回調報錯為null?求幫助啊
