对一个defaultValue=”且not null的新增字段增加索引,会引发COUNT计算结果为0的问题
– 创建测试表
CREATE TABLE tmp_tab_a(ID NUMBER PRIMARY KEY,NAME VARCHAR2(20));
– 插入测试数据
begin for i in 1..100 loop INSERT into tmp_tab_a (id,NAME)values(i,'str'||i);
end loop;
commit;
end;
– count(*)结果为100
– 执行计划显示走的主键索引进行count(*)计算
select count(*) from tmp_tab_a;
– 新增一个字段 sseqno not null,default = ”
alter table TMP_TAB_A add sseqno varchar2(20) default '' not null;
– 对字段sseqno新增一个索引
create index IND1_TMP_TAB_A ON TMP_TAB_A (sseqno);
– 异常情况出现count(*)结果都是 0
– 执行计划显示走的索引为IND1_TMP_TAB_A
select count(*) from TMP_TAB_A;
select count(id) from TMP_TAB_A;
– 将sseqno 的 not null属性去除,允许为null
alter table TMP_TAB_A modify sseqno null;
– 查询count结果为100,结果正确!
– 执行计划显示走的主键索引进行count(*)计算
select count(*) from TMP_TAB_A;
select count(id) from TMP_TAB_A;
原文链接:https://www.f2er.com/oracle/206632.html