 |
SQL Engine Reference (v11) |
 |
|
クエリ プランの検査およびクエリ パフォーマンスの評価
Query Plan Viewer は特に、作成したクエリをテストして、そのクエリをデータベース エンジンがどのように実行するかを調べる、プロジェクトの開発段階で役に立ちます。それぞれのクエリを作成し、クエリ プラン ファイルを 1 つ生成してから、各プランを検査することができます。各クエリの情報を基に、インデックスを追加したり削除したりして、その変更による影響を調べることができます。また、クエリを変更して、ステートメントの構文に加えた変更がパフォーマンスに影響を及ぼすかどうかを調べることもできます。
比較するクエリ プランの例を作成する
例として、以下の手順に従って、Pervasive PSQL で提供されるサンプル データベース DEMODATA のいくつかのテーブルを使用することにより、Query Plan Viewerの使い方を実演できます。
比較のために、Enrolls テーブルからインデックスを 1 つ削除し、クエリを実行してクエリ プラン ファイルを作成した後、Enrolls にインデックスを追加し直し、クエリをもう一度実行して比較クエリ プラン ファイルを作成します。
- Pervasive PSQL Control Center(PCC)で、クエリ プランの作成を有効にする SQL ステートメントと、クエリ プラン ファイルの名前を example1.qpf と指定する SQL ステートメントを実行します。Query Plan の設定を参照してください。
- PCC で、DEMODATA データベースに対して次のクエリを実行します。
DROP INDEX Enrolls.ClassID
- DEMODATA はインストールするときに最適化されるため、Enrolls テーブルの Class_ID 列からインデックスを削除する必要があります。
- PCC で、DEMODATA データベースに対して次のクエリを実行します。
SELECT Student.ID, Class.Name, Course.Credit_Hours
FROM Student, Enrolls, Class, Course WHERE
Student.ID = Enrolls.Student_Id AND
Enrolls.Class_ID = Class.ID AND Class.Name =
Course.Name
- このクエリは、在籍するすべての学生と、学生が登録している講座、および各コースの履修単位時間を取得します。
- PCC で、クエリ プラン ファイルの名前を example2.qpf と指定します。Query Plan の設定を参照してください。
- PCC で、DEMODATA データベースに対して次のクエリを実行します。
CREATE INDEX ClassID ON Enrolls(Class_ID)
- PCC で、DEMODATA データベースに対して次のクエリを実行します。
SELECT Student.ID, Class.Name, Course.Credit_Hours
FROM Student, Enrolls, Class, Course WHERE
Student.ID = Enrolls.Student_Id AND
Enrolls.Class_ID = Class.ID AND Class.Name =
Course.Name
- クエリの実行が速くなったことに気付いてください。
クエリ プランの例を表示する
Query Plan Viewer で、example1.qpf を開きます([ファイル|開く])。次のように表示されます。
次に、比較のために Query Plan Viewer で example2.qpf を開きます。次のように表示されます。
このプランについて、次の点に注目してください。
- Course テーブルからレコードがスキャンされます。
- Class.Name インデックスを使用して、Class.Name 値を基に Class テーブルからレコードが取得されます。
- Class.ID 値を基に Enrolls テーブルをスキャンして、Enrolls テーブルからレコードが取得されます。
- Student.ID インデックスを使用して、Enrolls.Student_Id 値を基に Student テーブルからレコードが取得されます。
- Enrolls からのデータの選択には、新しく作成されたインデックス ClassID を使用します。
この例と同じように自分で作成したクエリを比較すれば、どのような構文および構造が自分の要求に適合しているかを判断することができます。
 Query Plan Viewer のタスク |
 |
|