MySQL中or、in、union与索引优化详析


本文缘起自《一分钟了解索引技巧》的作业题。假设订单业务表结构为:其中:假设订单有三种状态:0已下单,1已支付,2已完成业务需求,查询未完成的订单,哪个SQL更快呢?结论:方案1最慢,方案2,3,4都能命中索引但是…一:union all 肯定是能够命中索引的说明:直接告诉MySQL怎么做,MySQL耗费的CPU最少程序员并不经常这么写SQL(union all)二:简单的in能够命中索引说明:让MySQL思考,查询优化耗费的cpu比union all多,但可以忽略不计程序员最常这么写SQL(in),这个例子,最建议这么写三:对于or,新版的MySQL能够命中索引说明:让MySQL思考,查询优化耗费的cpu比in多,别把负担交给MySQL不建议程序员频繁用or,不是所有的or都命中索引对于老版本的MySQL,建议查询分析下四、对于!=,负向查询肯定不能命中索引说明:全表扫描,效率最低,所有方案中最慢禁止使用负向查询五、其他方案这个具体的例子中,确实快,但是:这个例子只举了3个状态,实际业务不止这3个状态,并且状态的“值”正好满足偏序关系,万一是查其他状态呢,SQL不宜依赖于枚开发云主机域名举的值,方案不通用这个SQL可读性差,可理解性差,可维护性差,强烈不推荐六、作业这样的查询能够命中索引么?注:此为示例,别较真SQL对应业务的合理性。总结以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对开发云的支持。

相关推荐: 解决mysql不是内部命令错误的问题

解决mysql不是内部命令错误的问题?这个问题可能是我们日常学习或工作经常见到的。希望通过这个问题能让你收获颇深。下面是小编给大家带来的参考内容,让我们一起来看看吧!出现mysql不是内部命令的错误是因为没有把mysql的bin目录路径添加到环境变量中解决方法…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 06/05 22:15
下一篇 06/05 22:15

相关推荐