Oracle之is null命中索引

IS NULL用于判断某一列中的值是否为空,当IS NULL作为WHERE条件的时候,查询不会命中该列上的索引(具体执行时还要看优化器的策略)。

-- 1.伪列 + 联合索引,通过加伪列,创建伪联合索引,来使IS NULL命中索引(数据量达到几万时,此索引将不会命中)
CREATE INDEX idx_zzxh ON bhis.mz_fp(zzxh, -1);

-- 2.通过decode函数,对字段进行null变换,形成函数索引(命中率高,但效率一般)
CREATE INDEX idx_zzxh_0 ON bhis.mz_fp(decode(zzxh, null, 0, 1));

-- 3.若目标字段是boolean型,或者少量枚举型,则可以通过bitmap index配合函数索引(命中率高,效率也高)
CREATE bitmap INDEX idx_zzxh ON bhis.mz_fp(decode(zzxh, null, 0, 1));
posted @ 2023-08-01 16:18  JaxYoun  阅读(195)  评论(0编辑  收藏  举报