字段中有null值查询不走索引的问题解决
发布时间:2020-12-12 14:51:01 所属栏目:百科 来源:网络整理
导读:生产环境发现有一条sql 效率很差,发现是由于查询中有null值,导致了执行计划不走索引。 搜索了解决办法,主要是创建该字段和其它常量字段的联合索引 或者通过函数索引排除空值的情况。 下面是测试过程 --测试 构造测试表 create table test_null (id number
生产环境发现有一条sql 效率很差,发现是由于查询中有null值,导致了执行计划不走索引。 搜索了解决办法,主要是创建该字段和其它常量字段的联合索引 或者通过函数索引排除空值的情况。
下面是测试过程 --测试 构造测试表 create table test_null (id number(10), comm varchar2(20)); 插入测试数据 declare i number; begin for i in 1..100000 loop if mod(i,10) !=0 then insert into test_null values (i,'aaa'); else insert into test_null values (null,'aaa'); end if; end loop; commit; end; 创建索引 create index idx_test_null on test_null(id); 查询空值 select count(*) from test_null where id is null; --全表扫描 修改方案一 create index idx_test_null_1 on test_null(id,1); 查询空值 select count(*) from test_null where id is null; --走索引idx_test_null_1 range scan drop index idx_test_null_1; 修改方案二: create index idx_test_null_2 on test_null(decode(id,null,1)); 查询空值 select count(*) from test_null where (decode(id,1)=1); --走索引idx_test_null_2 range scan drop index idx_test_null_2;
结果,两种方式都可以达到查询null值走索引的效果,但是由于创建函数索引还需要修改查询语句,代价较高, 故第一种修改方式比较好,直接创建该字段和一个常量的联合索引即可, (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |