28. 複合インデックス(コンポジット・インデックス)
0.599862
インデックス作成時に複数の列を指定可能 FETCH
→ 複合インデックス ( 2)
17.639
2.59986
CREATE INDEX インデックス名 ON /---+----¥
表名(列名,列名, ...) 1
0.599862 300024 GRPBY
IXSCAN TABLE: SIM ( 2)
複合インデックスの使い道 ( 3) EMP 768.856
13.5753 Q1 533.186
例) CREATE INDEX IDX_COMP ON 2 |
EMP(GENDER,SALARY) | 179973
300024 IXSCAN
INDEX: SIM ( 3)
IDX_COMP 723.256
①複合条件の高速化 Q1 533.186
• SELECT * FROM EMP WHERE GENDER='M' |
AND SALARY > 110000 300024
INDEX: SIM
IDX_COMP
②インデックスのみのアクセスでデータを返す
Q1
• SELECT AVG(SALARY) FROM EMP WHERE
GENDER='M'
28
29. インデックスを使う?使わない?②
複合インデックスの先頭を条件に含まない場合
例) CREATE INDEX IDX_COMP ON EMP(GENDER,SALARY)
A)SELECT AVG(SALARY) FROM EMP WHERE GENDER='M' <= ○使える
B)SELECT COUNT(*) FROM EMP WHERE SALARY>110000 <= ×使えない
–複合インデックスの検索の基準は、定義の最初の列
DB2 10.1新機能: ”ジャンプ・スキャン”
–上記B)のようなケースでもインデックスが使える
- 列の「ギャップ」があるインデックスが存在した場合、そのギャップを取り得る
値全パターンで埋めながらインデックスを検索する
• WHERE SALARY>110000
=> WHERE (GENDER='F' OR GENDER='M') AND SALARY>110000
参考)
http://publib.boulder.ibm.com/infocenter/db2luw/v10r1/topic/com.ibm.db2.luw.wn.doc/doc/c0058597.html
29
43. RUNSTATSコマンド(統計情報の更新) 多くの場合、この
基本形でOK
RUNSTATSコマンドで統計情報を更新する
RUNSTATS ON TABLE スキーマ名.表名
RUNSTATS ON TABLE スキーマ名.表名 AND INDEXES ALL
(※DB2 10.1からスキーマ名が省略可能になっています)
– RUNSTATS実行中でも表に読み書きアクセス可能
データに「偏り」がある場合、
少し進んだ使い方 拡張統計を試してください
– ①拡張統計で収集する
RUNSTATS ON TABLE スキーマ名.表名 WITH DISTRIBUTION
RUNSTATS ON TABLE スキーマ名.表名 WITH DISTRIBUTION AND SAMPLED
DETAILED INDEXES ALL
表を5%サンプリング
– ②サンプリングでRUNSTATSの実行時間を短くする
RUNSTATS ON TABLE SIM.DEPARTMENTS WITH DISTRIBTION TABLESAMPLE
BERNOULLI (5)
43
44. 補足:サンプル表で使用したデータについて
サンプル表のDDLとデータはCLUB DB2ホームページからダウンロード可能です
– https://www.ibm.com/developerworks/wikis/display/clubdb2/145
上記データは、以下の「Employees sample database」からダウンロードしたファイルを元に作成したものです。
– http://dev.mysql.com/doc/employee/en/employee.html
この元ファイルのライセンスは、「Creative Commons Attribution-Share Alike 3.0 Unported License.」
( http://creativecommons.org/licenses/by-sa/3.0/ )であるため、改変後のファイルも同じライセンスに従います。
以下は元ファイル(オリジナル)のcopyright表記です。
-- Sample employee database
-- See changelog table for details
-- Copyright (C) 2007,2008, MySQL AB
--
-- Original data created by Fusheng Wang and Carlo Zaniolo
-- http://www.cs.aau.dk/TimeCenter/software.htm
-- http://www.cs.aau.dk/TimeCenter/Data/employeeTemporalDataSet.zip
--
-- Current schema by Giuseppe Maxia
-- Data conversion from XML to relational by Patrick Crews
--
-- This work is licensed under the
-- Creative Commons Attribution-Share Alike 3.0 Unported License.
-- To view a copy of this license, visit
-- http://creativecommons.org/licenses/by-sa/3.0/ or send a letter to
-- Creative Commons, 171 Second Street, Suite 300, San Francisco,
-- California, 94105, USA.
--
-- DISCLAIMER
-- To the best of our knowledge, this data is fabricated, and
-- it does not correspond to real people.
-- Any similarity to existing people is purely coincidental.
44