mysql - 這條sql可以怎么優(yōu)化,求幫助
問(wèn)題描述
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問(wèn)題解答
回答1:盡管從explain結(jié)果看這個(gè)查詢沒(méi)什么特別問(wèn)題,但以下幾點(diǎn)可以考慮一下。1、shippingtype和status看起來(lái)是個(gè)枚舉值,可以用tinyint代替(數(shù)值查詢比字符串查詢速度要快);2、endtime設(shè)為NOT NULL, 把原來(lái)的null值用一個(gè)特殊值(-1或0)代替,NULL值會(huì)影響索引的效率;3、可以的話,用user_id代替user;
個(gè)人YY的優(yōu)化:
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個(gè)條件沒(méi)什么好說(shuō)的,主要是后面三個(gè)條件,分別是consigntime、created和endtime,根據(jù)篩選范圍從小到大來(lái)排列(具體要看你的表里這三個(gè)字段的范圍段)。
部分建議是基于你能修改表結(jié)構(gòu)的基礎(chǔ)上提出的,如果沒(méi)有權(quán)限的話那就忽略吧。
參考資料:http://tech.meituan.com/mysql...
回答2:Strong
回答3:那個(gè) 不等于 影響性能
回答4:從explain上來(lái)看沒(méi)什么問(wèn)題
相關(guān)文章:
1. css - 新手做響應(yīng)式布局, 斷點(diǎn)過(guò)后右側(cè)出現(xiàn)空白,求幫助,謝謝。2. mysql - 優(yōu)惠券表應(yīng)該怎么建,求幫助3. node.js - mongoose 查詢數(shù)據(jù)庫(kù) 回調(diào)報(bào)錯(cuò)為null?求幫助啊4. javascript - 求幫助 , ATOM不顯示界面!!!!5. 老師你好 請(qǐng)求幫助 在選擇版本和顏色出錯(cuò) 選擇第二個(gè)的時(shí)候默認(rèn)選項(xiàng)顏色不恢復(fù)原來(lái)的顏色6. 新人做網(wǎng)站求幫助7. Help!求幫助8. python - 用urllib抓取網(wǎng)頁(yè)上的下載鏈接,目標(biāo)文件是xls形式,但發(fā)現(xiàn)抓下來(lái)的xls是空表,里面只有一句報(bào)錯(cuò)信息,求幫助。9. php表單的屬性怎么會(huì)出現(xiàn)在表單里面呢 求幫助 謝謝10. node.js - npm安裝模塊時(shí),在cmd上顯示的是一條白線,白線前面是一天反斜線轉(zhuǎn)圈圈,然后就出現(xiàn)npm ERR錯(cuò)誤了,求幫助,謝謝
