【MySQL】OR條件語句的優化


當查詢語句中的多個查詢條件使用OR關鍵字進行連接時,只要OR連接的條件中有一個查詢條件沒有使用索引,MySQL就不會使用索引,而是對數據表進行全表掃描。也就是說,使用OR連接多個查詢條件,且每個查詢條件必須使用索引時,MySQL才會使用索引查詢數據。

如下表

--- show create table g_dict_item
CREATE TABLE `g_dict_item` (
  `UUID` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL DEFAULT '',
  `CODE` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
  `ITEM_NAME` varchar(150) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
  `VALID_MARK` char(1) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
  `REMARK` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
  `ITEM_CODE` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
  `ITEM_ORDER` int DEFAULT NULL,
  `BIG_TEXT` varchar(20000) CHARACTER SET utf8 DEFAULT NULL,
  PRIMARY KEY (`UUID`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;

1、OR關聯字段有一個字段沒建索引

2、OR 關聯字段都建索引

添加索引:

ALTER TABLE `sakila`.`g_dict_item` ADD INDEX `idx_code`(`CODE`);

3、OR關聯三個字段,最后一個字段沒建索引

再添加一個OR條件

4、使用 UNION ALL 對 OR 查詢進行優化

OR查詢,使用 union all進行優化

1、

2、

總結:

遇到 OR 查詢盡量使用 UNION ALL 或者 IN 來代替。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM