1

同じExplain Plainを持つ2つのクエリがあります:

1) select * from cfm_t_dmp;

2) SELECT CATEGORY_ID,
   STATUS,
   USERNAME,
   VALID_FROM,
   EXTRACTVALUE (
      XMLType (data_definition),
      '/customer/type/permissions/text()'),
   EXTRACTVALUE (
      XMLType (data_definition),
      '/bundle/configuration/permissions/text()'),
   AB_LOCK
FROM cfm_t_dmp

クエリ 1) は非常に高速に実行されますが、クエリ 2) 数分の処理後に結果が表示されません。

主な違いは、extractvalue です。前に 2) クエリを実行しましたが、高速でした。

2) クエリを何らかの方法で調整できますか、それとも DB の問題ですか?

ありがとう、

4

1 に答える 1

1

Oracle はこれらの XPath で XML タイプを検索する必要があるため、2 番目のクエリは遅くなります。大量のデータがある場合、または XML コンテンツが大きい場合、これは余分な作業が多くなり、クエリの速度が低下します。

高速化するには: XPath が変更されず、XML データも変更されない場合は、EXTRACTVALUE式の結果を含む列を追加できます。そのデータのクエリは、クエリを呼び出す必要がないためEXTRACTVALUE(新しい列のデータを読み取るだけなので) 高速になりますが、挿入または更新時にデータを事前に入力する必要があります。

Oracle で XML データのインデックスを作成することも明らかに可能ですが、私はこれを自分で試したことはありません。これらの xpath の値の条件をテストしていますが、インデックス作成がここで役立つかどうかはわかりません。

于 2012-12-20T15:43:03.007 に答える