検索

セカンダリー・インデックスとTeradata Index Wizard


インデックスとは

インデックスは日常生活でも頻繁に使われています。例えば、本屋に行けば文庫本はたいてい出版社ごとに分類されていて、その中で作者名順にインデックスが付けられています。そのため、出版社と作者が分かっていればすぐに目的の本を見つけることができますし、作者しか分からない場合でも、それぞれの出版社の棚のインデックスを探せば見つけられます。ただし、作者が不明で本のタイトルしか分からない場合、このインデックスは意味を持たなくなり、目的の本を探すには全ての本を隈なく探す(すなわち全件検索する)必要があります。

データベースのインデックスも、目的のデータをいち早く見つけ出すという意味において、一般的なインデックスと同じ役割を果たします。特に、予め検索方法が想定できる定型的な検索の場合は、インデックスを適切に作成することで全件検索を避け、パフォーマンスを向上させることができます。しかし、本屋の例と同様に、検索条件を変えるとそのインデックスは意味を持たなくなる場合もありますので、データベースのインデックスも万能ではありません。

本来、データウェアハウスにおけるデータ検索の真骨頂は自由検索、すなわち非定型検索です。Teradataデータベースはその並列処理技術によって、非定型検索に伴う全件検索にも優れたパフォーマンスを発揮します(例えば 100AMP(*1) システムの場合は、100人がかりで目的のタイトルの本を探すのと同じです)。しかし、全件検索はシステムリソースを消耗するため、できることなら避けたいというのも事実です。定型的な検索に対しては、SI を適切に作成することで全件検索を回避し、システムリソースを有効に活用することができます。

セカンダリー・インデックス

PI が全てのテーブルで必須であるのに対して、SI はオプションです。SI を定義するとインデックスの情報を保持するためのサブテーブルが作成されます。ただし、SI が検索処理で実際に使われるか否かはオプティマイザー(*2) の判断であり、ユーザーは SI の使用を強要することはできません。そのため、むやみに SI を定義してもディスクを浪費するだけで、パフォーマンスの向上にはつながらないので注意してください。PI を削除することはできませんが、不要な SI は簡単な操作で削除することができます。PI と SI の主な特徴と違いは、表1 を参照してください。

SI は、PI と同様にインデックスを定義するカラムの内容がユニークか否かで、USI(ユニーク・セカンダリー・インデックス)と NUSI(ノンユニーク・セカンダリー・インデックス)に分類できます。

USI

USI のサブテーブルは、インデックスの値や基本テーブルの行ID などの情報を保持し、通常のテーブルと同様に各 AMP にハッシュ分散(*3) されます。USI によるデータ・アクセスは、ある AMP上の USIサブテーブルが、どこかの AMP の基本テーブルをポイントすることによって行われます(図1 上段)。従って、この操作には 2つの AMP だけが使用されるため、非常に効率の良い検索が実現されます。

NUSI

NUSI のサブテーブルは、同じ AMP内の基本テーブルに関する情報だけを保持します。インデックスの値は複数の AMP に散らばっているため、NUSI によるデータ・アクセスは、全AMP操作になります(図1 下段)。そのため、検索のパフォーマンスは USI 程良くありませんが、ディスク上の検索範囲が限定されるため全件検索よりもパフォーマンスは向上します。

Teradata Index Wizard

SI は検索のパフォーマンスを向上させる有効な手段です。しかし、実際にどのテーブルのどのカラムに、どのようなタイプの SI を定義するべきかという判断は難しい場合があります。この判断を強力に支援するツールが、Teradata Index Wizard(TIWIZ)です。TIWIZ は Microsoft Windows(R)上で稼働する操作性の優れた GUIユーティリティです。

TIWIZ を使うと、以下の手順で SI を定義することができます。

1. 作業負荷の定義

検索のパフォーマンスを改善したい SQL文のセットを作業負荷として TIWIZ に登録します。作業負荷とは、一連の SQL文が実行されることに伴うTeradataデータベースに対する負荷のことを言います。

2. インデックス分析

TIWIZ は、登録された作業負荷のパフォーマンスを向上させるには、どこに SI を定義すれば良いのかを分析します。

3. レポートの表示

TIWIZ は、分析が完了すると各種の分析結果レポートを生成します。これらのレポートによって、SI の作成が推奨されたカラムや必要なディスク容量などを確認することができます。

4. 推奨されたインデックスの検証

TIWIZ によって SI の作成が推奨された場合、SI を作成することで作業負荷のパフォーマンスがどの程度改善されるのかを検証することができます。この検証の段階ではまだ SI は作成されません。

5. 推奨の実行

検証の結果 SI の定義が有効と判断した場合、推奨を実行することで自動的に SI が作成されます。

まとめ

SI は適切に作成すれば検索のパフォーマンスを大幅に向上させることができますが、オプティマイザーが見向きもしない SI を定義してもディスクを浪費するだけでメリットはありません。それだけに、SI の作成はかなりの知識と経験を必要とする作業でした。しかし、今は TIWIZ という便利なツールがあります。TIWIZ を活用することで推量に頼ることなく、誰もが最適な SI を作成することができますので、是非ご活用ください。

  • *1: AMP は、Teradata に接続されているディスク・サブシステムを管理するプロセスです。各AMP は、物理ディスク領域の一部分を管理し、その領域内にテーブルの一部分が格納されます。

  • *2: オプティマイザーは、SQL文と統計情報を解析して、要求されたデータに対する最も効率的なアクセス経路を構築する Teradata の最適化ルーチンです。

  • *3: ハッシュ分散は、行単位に分割されたデータを各AMP に均等に分散して格納する手法です。