💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
# 优化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