SQL优化技巧 - OR连接的条件重写为UNION
· 阅读需 6 分钟
问题定义
如果使用OR连接两个查询条件,数据库优化器有可能无法使用索引来完成查询。譬如对于以下的SQL语句,
select * from customer where c_phone like '139%' or c_name = 'Ray'
如果这两个字段上都有索引,可以把他们重写为UNION
查询,以便使用索引提升查询性能。
select * from customer where c_phone like '139%'
union
select * from customer where c_name = 'Ray'
但是这种转换并不总是能够提升查询性能,它需要一定的适用条件,并需要经过基于代价的估算。