SQL パフォーマンスの最適化の概要
Caché SQL は、SQL のパフォーマンスを最適化する複数の機能をサポートしています。
テーブル定義の最適化
SQL のパフォーマンスは、基本的にデータ・アーキテクチャが適切かどうかによって決まります。複数のテーブルにデータを分割して、それらのテーブルにリレーションシップを確立することは、効率的な SQL にとって欠かせないことです。テーブルとそれらのテーブル間のリレーションを定義する方法は、このドキュメントでは説明していません。
このドキュメントでは、テーブル定義を最適化するための以下の操作について説明します。これらの操作では、テーブルを定義することが必要ですが、テーブルにデータを移入するテーブルは必要はありません。
テーブル・データの最適化
テーブル内の一般的なデータの分析に基づいてテーブル・アクセスを最適化するために、以下の操作を実行できます。
-
テーブルのチューニング:一般的なテーブル・データを調べて、ExtentSize (行数)、Selectivity (特定の値を保持する行の割合)、および BlockCount メタデータを生成します。クエリ・オプティマイザは、この情報を使用して、最も効率的なクエリ実行計画を決定します。
-
Selectivity と Outlier Selectivity:フィールドに特定の値を保持している行の割合と、ある値が異常値 (そのフィールドの他の値よりも著しく多く存在する値) であるかどうかを判断します。
クエリの最適化
特定のクエリの実行を最適化するために、以下の操作を実行できます。これらのクエリの最適化には、既存のテーブル定義の最適化とテーブル・データの最適化を使用します。
-
実行時統計:目的のシステム上でのクエリ実行のパフォーマンスを測定するために使用します。
-
[プラン表示] に、クエリの実行プランが表示されます。
-
クエリ・キャッシュとリテラル置換:最近のダイナミック・クエリのキャッシュを維持し、クエリを準備するオーバーヘッドを繰り返すことなく、クエリを再実行できるようにします。
-
SQL 文と凍結プランにより、特定のクエリ実行プランを維持できるようになります。
-
インデックスの構成と使用率:既存のインデックスの使用方法を指定するために使用します。
-
インデックスの最適化ヒント:%ALLINDEX、%IGNOREINDEX
-
JOIN の最適化ヒント:%FIRSTTABLE、%FULL、%INORDER、%STARTTABLE
-
サブクエリの最適化ヒント:%NOFLATTEN、%NOMERGE、%NOREDUCE、%NOSVSO
-
クエリの並行実行:FROM %PARALLEL
構成の最適化
既定では、[メモリと開始設定] の既定値は [自動] に構成されていてます。また、[プロセス当たりの最大メモリ] の既定値は 262,144 kb に構成されています。プロダクション・システムで実行する SQL を最適化するには、既定値を [手動] に構成して、[プロセス当たりの最大メモリ] の設定値を大きくする必要があります。詳細は、"Caché システム管理ガイド" の “Caché の構成” の章にある "メモリと開始設定" を参照してください。