# 優化OR條件
對于包含OR的查詢子句,如果要利用索引,則OR之間的每個條件列都必須用到索引 , 而且不能使用到復合索引; 如果沒有索引,則應該考慮增加索引。
獲取 emp 表中的所有的索引 :
~~~
show index from emp;
~~~

示例 :
```SQL
explain select * from emp where id = 1 or age = 30;
```

建議使用union 替換or :

我們來比較下重要指標,發現主要差別是 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提示