Ultra Light オプティマイザーは、クエリの最適化に使用するインデックスを選択する際に、優れた最適化方式を取ります。ただし、単純なクエリの場合、オプティマイザーがクエリパフォーマンスの最適化に使用するインデックスをあらかじめ決めることや、そもそもインデックスを使用するかどうかを決めることは、簡単ではありません。複雑さが増すにつれて、選択するインデックスはクエリで必要な句によって変わってきます。通常、FOR READ ONLY 句が存在することで、オプティマイザーが、クエリパフォーマンスの向上のためにインデックスではなくダイレクトテーブルスキャンを選択することがあります。
クエリを最適化する場合、オプティマイザーはクエリの要件を確認し、パフォーマンスの向上に使用できるインデックスがないかどうかをチェックします。どのインデックスを使用してもパフォーマンス向上が望めない場合、オプティマイザーはインデックスをスキャンせず、テンポラリテーブルかダイレクトページスキャンを使用します。したがって、インデックスを使用して実験し、生成された実行プランを頻繁にチェックして、次の事項を確認する必要があります。
オプティマイザーによって使用されないインデックスを保持していないこと。
作成されるテンポラリテーブルの数を最小限に抑えていること。
複雑なクエリの場合には、使用されるインデックスを予測するのはさらに困難です。たとえば、クエリに WHERE 述部があり、ORDER BY 句に加えて GROUP BY 句が存在する場合、インデックスが 1 つだけではクエリの探索条件を満たさない可能性があります。したがって、WHERE 述部の選択性要件を満たすインデックスを作成していても、オプティマイザーがそれを使用しない可能性があります。代わりに、オプティマイザーは、最も多くの処理を必要とする ORDER BY 条件でのパフォーマンスが最も優れているインデックスを使用する可能性があります。
![]() |
DocCommentXchange で意見交換できます
|
Copyright © 2012, iAnywhere Solutions, Inc. - SQL Anywhere 12.0.1 |