不知道大家有沒有遇到這種坑,就是把一張表的額字段改了,然后整個查詢變得特別慢,引起業務問題。然后去查找原因,竟然是修改了表中的字段引起的。
drop table t purge;
create table t (object_id number,object_name long);
create index idx_object_id on t(object_id);
insert into t select trunc(DBMS_RANDOM.VALUE(0,100000),0),dbms_random.string('a',30) from dual connect by rownum <= 100000;
commit;
select count(*) from t;
select * from t where rownum <5;
查看索引狀態:
select t.status,t.index_name from user_indexes t where index_name='IDX_OBJECT_ID';
現在進行修改,把long 類型修改成其他類型clob(其它類型需要這一列為空值)
alter table t modify OBJECT_NAME clob;
查看索引狀態:
整個表索引變得不可用,如果是生產上使用比較頻繁的表,索引不可用,很容易出現問題,導致業務HANG住(如果表進行move索引也會失效)。
解決方案:
索引進行重建,或者刪除后重新建索引。
alter index idx_object_id rebuild;
select t.status,t.index_name from user_indexes t where index_name='IDX_OBJECT_ID';
除此之外,long類型不能直接轉換成varchar2!