Archive for March 11th, 2008

全文索引的代价

Tuesday, March 11th, 2008

今天下午做了全文索引的update测试。被测试的SQL如下:
update ali_zeus_customer set OPEN_REASON=’wt’ where rownum=1 (OPEN_REASON字段是个全文索引字段)

结果做了把TRACE发现,仅仅是这条UPDATE,全文索引需要执行下面一系列的SQL,比普通INDEX字段维护的大家和成本要高很多。
update ali_zeus_customer set OPEN_REASON=’wt’ where rownum=1
DELETE “ZEUS”.”DR$ALI_ZEUS_CUST_OPEN_CIND$K” WHERE TEXTKEY = :rid RETURNING DOCID INTO :docid
INSERT INTO “ZEUS”.”DR$ALI_ZEUS_CUST_OPEN_CIND$N” (NLT_DOCID,NLT_MARK) VALUES(:docid,’U’)
INSERT INTO DR$DELETE (DEL_IDX_ID,DEL_IXP_ID,DEL_DOCID) VALUES(:idxid,:ixpid,:docid)
INSERT INTO CTXSYS.DR$PENDING (PND_CID, PND_PID, PND_ROWID, PND_TIMESTAMP, PND_LOCK_FAILED) VALUES(:1, :2, :3, SYSDATE, ‘N’)
begin ctxsys.syncrn(:idxid, :ixpid, :rtabnm); end;
select del_docid from ctxsys.dr$delete where del_idx_id = :idxid and del_ixp_id = [...]

Returnning into的使用

Tuesday, March 11th, 2008

今天在做ORACLE本身的TRACE的时候发现的。以前还真没用过。示例如下:
 @>create table wt(id number,name varchar2(200)); Table created. 
@>insert into wt values(1,’mytest’); 
1 row created. 
@>commit; Commit complete. 
@>declare  
2  va varchar2(200); 
3  begin 
4  delete from wt where id=1 returning name into va; 
5  dbms_output.put_line(’My value:’ || va); 
6  end; 
7  /
My value:mytest 
PL/SQL procedure successfully completed.

DBA