データベースの構造上のボトルネックを「見える化」する
VST図入門
VST図は、クエリーに含まれるテーブルとその結合状況を表示します。要約モードでは、テーブルとその結合関係だけが図示されます。また、詳細モードでは、テーブルに含まれる列が表示されます。多数の列がある場合でも、クエリーで使用される列のみが表示されるので、クエリーに特化して、詳細情報を見ることができます。
VST図は、クエリーを構成する要素を、テーブル単位、または列単位で視覚化したものです。クエリーの結果セットに複数のテーブルの列の値が含まれる場合、それらは、複数テーブルの結合によって得られたものです。そして、それらのデータを取得するときにWHERE節によってフィルターがかけられると、実際に処理するデータの数が変化します。こうした処理を行うSQL文に登場するすべてのテーブル、列を図に表し、その関係を示せば、どこに問題があるのか、処理に無駄があるのかを理解しやすくなるということです。
VST図で重要な要素のひとつがフィルターです。フィルターがかけられたテーブル(詳細モードではそのフィールド)には、[F]のアイコンが表示されます。フィルターは、扱う行数に大いに関係してきますので、どの順序で実行されるかを見るときに、チェックしなければならない項目になります。
もうひとつ重要なのは、結合です。テーブル間の結合関係は、結合線で表されます。一般的にクエリーで問題となるのは、1対1や1対多の結合ではなく、多対多、または、あるテーブルのすべての列が他のテーブルのすべての列に結合するような交差結合です。これらの結合については、赤で表示されるので、スキーマ設計に不備があることが容易に判別できます。
図2:VST図によるSQLクエリーの解析(クリックで拡大) |
統計情報を使って問題を理解する
VST図では、さらにさまざまな統計を表示することができます。例えば、フィルターにより抽出された行の割合や結合時の行数などです。これらの情報は、単に結合が不適切というような明瞭なエラーだけでなく、コストのかかる処理をいかに周到に回避するかのヒントを与えます。
例えば、いくつかのフィルターが存在する場合、統計情報を見れば、どのフィルターが最も効果的なフィルターなのかが分かります。定石は、もっともフィルター効果の高いフィルターから始めることで、処理数を最小化します。例えば、10,000件あるデータを1,000件にフィルターする処理と、5,000件にフィルターする処理のどちらを先に行えば、次に行う処理の件数が減少するかは明らかでしょう。このような順序を解析するのに、VST図は大変役立つのです。
複数のパスが存在する場合に、どちらを選択するべきかは、最終的に実際のデータの量によって変わります。VST図では、単に構造を見るだけでなく、統計情報も参照できるので、実データに即した判断が可能になるのです。