Oracle/PLSQL中替代NOT LIKE的查询性能优化方案咨询
优化
NOT LIKE 'A%'查询性能的替代方案 针对你的查询SELECT id FROM Example_Table e WHERE e.Example_Column NOT LIKE 'A%',以下是几种提升性能的替代方案:
利用前缀索引
给Example_Column创建仅包含首字符的前缀索引,让数据库快速定位以'A'开头的记录,再反向筛选目标结果:CREATE INDEX idx_example_col_prefix ON Example_Table(Example_Column(1));相比全表扫描,前缀索引体积更小,查询时的IO开销会显著降低。
改写为范围查询
将NOT LIKE 'A%'转化为等价的范围条件,直接利用普通B-tree索引:SELECT id FROM Example_Table e WHERE e.Example_Column < 'A' OR e.Example_Column >= 'B'数据库可以通过索引快速定位符合
< 'A'或>= 'B'的区间,避免全表扫描。新增辅助列并建立索引
添加一个存储计算结果的辅助列,标记记录是否以'A'开头,再通过等值查询利用索引:-- 添加生成列 ALTER TABLE Example_Table ADD COLUMN Starts_With_A BOOLEAN GENERATED ALWAYS AS (Example_Column LIKE 'A%') STORED; -- 给辅助列建索引 CREATE INDEX idx_starts_with_a ON Example_Table(Starts_With_A);后续查询改为:
SELECT id FROM Example_Table e WHERE e.Starts_With_A = FALSE;等值查询的索引命中率接近100%,适合频繁执行此类查询的场景。
分区表优化
如果表数据量极大,可按Example_Column的前缀进行分区,将以'A'开头的记录单独划分到一个分区。查询时直接排除该分区,仅扫描其他分区的数据,大幅减少扫描范围。
内容的提问来源于stack exchange,提问作者wonka
相关产品推荐
相关产品推荐

