全文索引的代价

作者:vogts | 分类: 大话技术 | 标签: | 日期:2008-03-11

今天下午做了全文索引的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 = :ixpid order by del_docid asc

select data from “ZEUS”.”DR$ALI_ZEUS_CUST_OPEN_CIND$R” where row_no = :row_no for update

delete from ctxsys.dr$delete where del_idx_id = :idxid and del_ixp_id = :ixpid

目前我唯一的感觉就是全文索引的代价真的太高了, 不仅仅需要一个BUILD去自身build,UPDATE还会触发一系列的动作。

PS:dr$delete、DR$ALI_ZEUS_CUST_OPEN_CIND$N都是ITO表。

3人发表了评论  ↓发表评论↓
  • 一般是文本作oracle text,不经常更新的字段比较适合。

    yumianfeilong @ March 12, 2008 |

  • 目前看来,飞龙的说法是有道理的。我们现在正努力把这部分功能迁移到search了。

    grassbell @ March 12, 2008 |

  • 如果是在大数据量的环境中和更改比较频繁的环境中,oracle本身的全文索引慢慢的被一些别的替代了,比如lunce

    hjwb @ March 24, 2008 |

表情:<( ̄︶ ̄)> | (⊙ˍ⊙) | >﹏< | b( ̄▽ ̄)d | (─.─||) | (^_-)

[ Ctrl+Enter提交 ]

DBA