MySQL中or、in、union与索引优化详析
发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,本文缘起自《一分钟了解索引技巧》的作业题。假设订单业务表结构为:order(oid, date, uid, status, money, time, …)其中:oid,订单ID,主键date,下单日期
千家信息网最后更新 2026年11月02日MySQL中or、in、union与索引优化详析
本文缘起自《一分钟了解索引技巧》的作业题。
假设订单业务表结构为:
order(oid, date, uid, status, money, time, …)
其中:
- oid,订单ID,主键
- date,下单日期,有普通索引,管理后台经常按照date查询
- uid,用户ID,有普通索引,用户查询自己订单
- status,订单状态,有普通索引,管理后台经常按照status查询
- money/time,订单金额/时间,被查询字段,无索引
- …
假设订单有三种状态:0已下单,1已支付,2已完成
业务需求,查询未完成的订单,哪个SQL更快呢?
- select * from order where status!=2
- select * from order where status=0 or status=1
- select * from order where status IN (0,1)
- select * from order where status=0
union all
select * from order where status=1
结论:方案1最慢,方案2,3,4都能命中索引
但是...
一:union all 肯定是能够命中索引的
select * from order where status=0union allselect * from order where status=1
说明:
直接告诉MySQL怎么做,MySQL耗费的CPU最少
程序员并不经常这么写SQL(union all)
二:简单的in能够命中索引
select * from order where status in (0,1)
说明:
让MySQL思考,查询优化耗费的cpu比union all多,但可以忽略不计
程序员最常这么写SQL(in),这个例子,最建议这么写
三:对于or,新版的MySQL能够命中索引
select * from order where status=0 or status=1
说明:
让MySQL思考,查询优化耗费的cpu比in多,别把负担交给MySQL
不建议程序员频繁用or,不是所有的or都命中索引
对于老版本的MySQL,建议查询分析下
四、对于!=,负向查询肯定不能命中索引
select * from order where status!=2
说明:
全表扫描,效率最低,所有方案中最慢
禁止使用负向查询
五、其他方案
select * from order where status < 2
这个具体的例子中,确实快,但是:
这个例子只举了3个状态,实际业务不止这3个状态,并且状态的"值"正好满足偏序关系,万一是查其他状态呢,SQL不宜依赖于枚举的值,方案不通用
这个SQL可读性差,可理解性差,可维护性差,强烈不推荐
六、作业
这样的查询能够命中索引么?
select * from order where uid in ( select uid from order where status=0)select * from order where status in (0, 1) order by date descselect * from order where status=0 or date <= CURDATE()
注:此为示例,别较真SQL对应业务的合理性。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对的支持。
索引
查询
订单
状态
方案
业务
普通
例子
建议
程序
程序员
内容
后台
用户
作业
学习
管理
肯定
最低
频繁
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
互联网高科技
云之行互联网科技
互联网科技官网
互联网科技公司发展
广州互联网络科技有限公司
苏州互联网科技贷款公司
奔汉互联网科技
联恩商钥互联网科技有限公司
畅思互联网科技
互联网科技和法律行业
互联网在线教育科技创业
佛山市拉法互联网科技有限公司
梅州GM互联网络科技有限公司
美国互联网科技公司
互联网安防科技感
南京一网一红互联网科技有限公司
北京互联网科技类企业分布
求路客互联网科技电话
科技互联网公司两年变化
小牛互联网科技有限公司地址
互联网科技与金融科技
深圳互联网络科技有限公司
互联网 卓越科技
未来的互联网科技
有木互联网科技
互联网 新科技
互联网科技类展会
现代科技和互联网有关系吗
银川新华互联网科技学校是国营吗
中国互联网公司的科技投入