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. 老师你好 请求帮助 在选择版本和颜色出错 选择第二个的时候默认选项颜色不恢复原来的颜色2. 新人做网站求帮助3. Help!求帮助4. mysql - 优惠券表应该怎么建,求帮助5. javascript - 求帮助 , ATOM不显示界面!!!!6. php表单的属性怎么会出现在表单里面呢 求帮助 谢谢7. node.js - mongoose 查询数据库 回调报错为null?求帮助啊8. css - 新手做响应式布局, 断点过后右侧出现空白,求帮助,谢谢。9. python - 用urllib抓取网页上的下载链接,目标文件是xls形式,但发现抓下来的xls是空表,里面只有一句报错信息,求帮助。10. node.js - npm安装模块时,在cmd上显示的是一条白线,白线前面是一天反斜线转圈圈,然后就出现npm ERR错误了,求帮助,谢谢