オンライン・オークション・サイトでは、品目の説明、価格、入札終了日などの情報を格納し、参照する必要があるため、CTXCAT
索引作成のよい例です。
図3-3は、次のスキーマを使用したAUCTION
という表を示しています。
create table auction( item_id number, title varchar2(100), category_id number, price number, bid_close date);
サブ索引を作成するには、サブ索引を格納する索引セットを作成します。
begin ctx_ddl.create_index_set('auction_iset'); end;
次に、アプリケーションが入力する可能性がある構造化問合せを特定します。CATSEARCH
問合せ演算子では、必須のテキスト句とオプションの構造化句を使用します。
この例では、すべての問合せにテキスト列であるtitle
列の句が組み込まれています。
構造化句は、次のカテゴリに分類されるとします。
構造化句 | 問合せを満たすサブ索引の定義 | カテゴリ |
---|---|---|
'price < 200' 'price = 150' 'order by price' |
'price' |
A |
'price = 100 order by bid_close' 'order by price, bid_close' |
'price, bid_close' |
B |
構造化問合せ句カテゴリA
構造化問合せ句には、次のように、価格列のみの式が含まれています。
SELECT FROM auction WHERE CATSEARCH(title, 'camera', 'price < 200')> 0; SELECT FROM auction WHERE CATSEARCH(title, 'camera', 'price = 150')> 0; SELECT FROM auction WHERE CATSEARCH(title, 'camera', 'order by price')> 0;
これらの問合せは、サブ索引Bを使用して満たすことができます。しかし、効率を上げるために、price
のみにサブ索引を作成することもできます。それをここではサブ索引Aとします。
begin ctx_ddl.add_index('auction_iset','price'); /* sub-index A */ end;
構造化問合せ句カテゴリB
構造化問合せ句には、price
についての等式にbid_close
でのソートの条件が付与されたもの、およびpriceとbid_close
の両方で(この順に)ソートの条件が付与されたものが含まれます。
SELECT FROM auction WHERE CATSEARCH( title, 'camera','price = 100 ORDER BY bid_close')> 0; SELECT FROM auction WHERE CATSEARCH( title, 'camera','order by price, bid_close')> 0;
これらの問合せは、次のように定義したサブ索引で満たすことができます。
begin ctx_ddl.add_index('auction_iset','price, bid_close'); /* sub-index B */ end;
結合されたBツリー索引と同様に、CTX_DDL.ADD_INDEX
を使用して指定する列の順序は、特定の問合せを満たすために使用される索引スキャンの効率性および実行可能性に影響します。たとえば、2つの構造化列p
とq
にBツリー索引が'p,q'
として指定されている場合、Oracle Textでは、この索引をスキャンして'ORDER
BY q,p'
をソートできません。