# 优化OR条件
对于包含OR的查询子句,如果要利用索引,则OR之间的每个条件列都必须用到索引 , 而且不能使用到复合索引; 如果没有索引,则应该考虑增加索引。
获取 emp 表中的所有的索引 :
~~~
show index from emp;
~~~
![](https://img.kancloud.cn/08/08/0808bb12a5ae4fb4697a42d888fb2373_2802x294.png)
示例 :
```SQL
explain select * from emp where id = 1 or age = 30;
```
![](https://img.kancloud.cn/23/43/234326533e66a3d893ff23a4b530436d_2878x362.png)
建议使用union 替换or :
![](https://img.kancloud.cn/71/1e/711ea4e51dbd65bebb000593602703a7_2830x302.png)
我们来比较下重要指标,发现主要差别是 type 和 ref 这两项,type 显示的是访问类型,是较为重要的一个指标,结果值从好到坏依次是:
```
system > const > eq_ref > ref > fulltext > ref_or_null > index_merge > unique_subquery > index_subquery > range > index > ALL
```
UNION 语句的 type 值为 ref,OR 语句的 type 值为 range,可以看到这是一个很明显的差距
UNION 语句的 ref 值为 const,OR 语句的 type 值为 null,const 表示是常量值引用,非常快
这两项的差距就说明了 UNION 要优于 OR
- 鸣谢
- 安装和配置
- Mac 安装MySql 8
- 授权用户远程登录
- MySql 命令加入系统命令
- 启动Mysql
- 索引
- 索引介绍与优势
- 索引结构
- 索引操作语法
- 索引设计原则
- 存储引擎
- MySql的体系解构
- 存储引擎
- 各种存储引擎特性
- 存储引擎的选择
- 优化SQL
- 查看SQL执行效率
- 定为低效率执行SQL
- explain分析执行计划
- show profile分析SQL
- tract 分析优化器执行计划
- 索引的使用
- 验证索引可以提高查询效率
- 索引使用
- 查看索引的使用情况
- SQL优化
- 大批量插入数据
- 优化insert语句
- 优化order by语句
- 优化group by的优化
- 优化嵌套索引
- 优化OR条件
- 优化分页查询
- 使用SQL提示