You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 05:02:46