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