索引列查询的UNION替换OR,真的是老生常谈的性能点子了。一般OR在多个索引列里用,挺容易把好好的索引直接废掉,走全表扫描,想想就头疼。嗯,换成UNION,每个条件单独走索引,结果再拼一起,响应也快,执行计划也清爽。

要是你还没试过,来看个例子:

SELECT LOC_ID , LOC_DESC , REGION FROM LOCATION WHERE LOC_ID = 10
UNION
SELECT LOC_ID , LOC_DESC , REGION FROM LOCATION WHERE REGION = "MELBOURNE"
比下面这种靠谱多了:
SELECT LOC_ID , LOC_DESC , REGION FROM LOCATION WHERE LOC_ID = 10 OR REGION = "MELBOURNE"
前面那种用UNION,每个条件能单独用索引,效率比OR高一大截。

哦,顺便提醒下,只对多个索引列效果好,一个字段上用OR没啥影响,别乱用哈。感兴趣的你可以顺手看看这些文章,优化点子还挺多: Oracle SQL 索引列避免使用 NOT 优化指南ORACLE SQL 性能优化:索引列与计算,还有 优化 MySQL SQL 查询性能建立高效多列索引

如果你平时写OracleMySQL,下次碰到OR,先琢磨下能不能拆开用UNION,大表场景下差别挺的。