goo blog サービス終了のお知らせ 

ORACLE技術研究所~バックナンバー~

メルマガ「ORACLE技術研究所」のバックナンバーページです。

検索性能に関する検証~その1~

2005-09-23 00:00:00 | バックナンバー
◇INDEXに存在しない項目を検索条件に入れた際の性能に対する影響

 TABLEからRECORDをSELECTする際、WHERE以下にSELECTしてくるRECORDの条件
を記述することができる。
 (SELECT文の機能:選択)

 この時、
 ・検索条件に指定されている項目が全てINDEXに含まれている場合。
 ・検索条件に指定されている項目の中にINDEXに含まれていない項目が存在
 する場合。
の2パターンで検索性能が、どの程度変化するのか検証してみたいと思う。

◇検証環境作成

 検証環境:
 RDBMS:ORACLE10.1.0
 OS:WindowsXP
 OptimizeMode=ALL_ROWS
 (統計情報未取得)

 まずはTABLEの作成。

 SQL> create table
  2 INDEX_TEST(
  3 COLUMN1 number(5),
  4 COLUMN2 number(5),
  5 COLUMN3 char(10),
  6 COLUMN4 char(10),
  7 COLUMN5 char(10),
  8 COLUMN6 char(10),
  9 COLUMN7 char(10),
  10 COLUMN8 char(10),
  11 COLUMN9 char(10),
  12 COLUMN10 char(10))
  13 tablespace user03;
 
 Table created.

 続いてデータの作成。

 SQL> begin
  2 for i1 in 1..100000 loop
  3 for i2 in 1..100 loop
  4 insert into INDEX_TEST(
  5 COLUMN1,
  6 COLUMN2,
  7 COLUMN3,
  8 COLUMN4,
  9 COLUMN5,
  10 COLUMN6,
  11 COLUMN7,
  12 COLUMN8,
  13 COLUMN9,
  14 COLUMN10)
  15 values
  16 (99999,
  17 i2,
  18 'AAAAAAAAAA',
  19 'BBBBBBBBBB',
  20 'CCCCCCCCCC',
  21 'DDDDDDDDDD',
  22 'EEEEEEEEEE',
  23 'FFFFFFFFFF',
  24 'GGGGGGGGGG',
  25 'HHHHHHHHHH');
  26 end loop;
  27 end loop;
  28 end;
  29 /
 
 PL/SQL procedure successfully completed.

 COLUMN1とCOLUMN3~10は全てのRECORDに同じ値が入っている。
 COLUMN2の値は1~100までの繰り返し。(行番号:2)
 TABLEの総件数は100*100000で10,000,000件。(行番号:2*行番号:3)
 条件式にCOLUMN2=1と記述すればTABLEの総件数の1%を取得できるように
した。

 次に、このTABLEに対してINDEXを作成する。

 SQL> create index IND_INDEX_TEST_1
  2 on INDEX_TEST(COLUMN2)
  3 tablespace index01;
 
 Index created.

 SQL> create index IND_INDEX_TEST_2
  2 on INDEX_TEST(COLUMN1,COLUMN2)
  3 tablespace index01;
 
 Index created.

 これで環境の作成は、おしまい。

 続きは来週・・・