Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (日本語) » Ultra Light データベース管理とリファレンス » Ultra Light データベースの使用 » Ultra Light のパフォーマンスと最適化

 

オプティマイザで使用するアクセス方法の決定

Ultra Light オプティマイザは、クエリの最適化に使用するインデックスを選択する際に、優れた最適化方式を取ります。単純なクエリの場合を除き、オプティマイザがクエリ・パフォーマンスの最適化に使用するインデックスをあらかじめ決めることや、そもそもインデックスを使用するかどうかを決めることは、簡単ではありません。複雑さが増すにつれて、選択するインデックスはクエリで必要な句によって変わってきます。場合によっては、FOR READ ONLY 句が存在することで、オプティマイザが、クエリ・パフォーマンスの向上のためにインデックスではなくダイレクト・テーブル・スキャンを選択することもあります。

クエリを最適化する場合、オプティマイザはクエリの要件を確認し、パフォーマンスの向上に使用できるインデックスがないかどうかをチェックします。どのインデックスを使用してもパフォーマンス向上が望めない場合、オプティマイザはインデックスをスキャンせず、テンポラリ・テーブルかダイレクト・ページ・スキャンを使用します。したがって、インデックスを使用して実験し、生成された実行プランを頻繁にチェックして、次の事項を確認する必要があります。

  • オプティマイザによって使用されないインデックスを保持していないこと。

  • 作成されるテンポラリ・テーブルの数を最小限に抑えていること。テンポラリ・テーブルの管理を参照してください。

複雑なクエリの場合には、使用されるインデックスを予測するのはさらに困難です。たとえば、クエリに WHERE 述部があり、ORDER BY 句に加えて GROUP BY 句が存在する場合、インデックスが 1 つだけではクエリの探索条件を満たさない可能性があります。したがって、WHERE 述部の選択性要件を満たすインデックスを作成していても、オプティマイザがそれを使用しない可能性があります。代わりに、オプティマイザは、最も多くの処理を必要とする ORDER BY 条件でのパフォーマンスが最も優れているインデックスを使用する可能性があります。

実行プランのチェック

実行プランは、API 呼び出しを使用してプログラムでチェックしたり、Interactive SQL のプラン・ビューワでチェックしたりできます。

  • インデックスが使用されていない場合   実行プランは次のように表示されます。
    scan(T)

  • テンポラリ・テーブルが使用されている場合   実行プランは次のように表示されます。
    temp [scan(T)]

  • インデックスが使用されている場合   インデックス名が実行プランに含まれている場合は次のように表示されます。
    scan (T, index_name)