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
43 RUNSTATSコマンド(統計情報の更新) RUNSTATSコマンドで統計情報を更新する – RUNSTATS実行中でも表に読み書きアクセス可能 少し進んだ使い方 – ①拡張統計で収集する – ②サンプリングでRUNSTATSの実行時間を短くする RUNSTATS ON TABLE スキーマ名.表名 RUNSTATS ON TABLE スキーマ名.表名 AND INDEXES ALL (※DB2 10.1からスキーマ名が省略可能になっています) 多くの場合、この 基本形でOK データに「偏り」がある場合、 拡張統計を試してください RUNSTATS ON TABLE スキーマ名.表名 WITH DISTRIBUTION RUNSTATS ON TABLE スキーマ名.表名 WITH DISTRIBUTION AND SAMPLED DETAILED INDEXES ALL RUNSTATS ON TABLE SIM.DEPARTMENTS WITH DISTRIBTION TABLESAMPLE BERNOULLI (5) 表を5%サンプリング
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.