◇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.
これで環境の作成は、おしまい。
続きは来週・・・