optimization_goal オプションを使用すると、SQL Anywhere において SQL 文を応答時間 (First-row) に対して最適化するか、リソースの総消費量 (All-rows) に対して最適化するかを制御できます。すなわち、クエリ処理の最適化の目的を、最初のローを迅速に返すことに設定するか、または完全な結果セットを返すコストを最小限に抑えることに設定できます。
このオプションを First-row に設定すると、SQL Anywhere は、クエリの結果の最初のローをフェッチするまでの時間を短縮するアクセスプランを選択します。この場合、検索にかかる合計時間は長くなることがあります。また、通常オプティマイザーでは、可能であれば結果の実体化を必要とするアクセスプランは使用しないで、最初のローを返すまでの時間を短縮します。この設定では、たとえばオプティマイザーは、明示的なソートの操作を必要とするアクセスプランではなく、クエリの ORDER BY 句を満たすインデックスを使用するアクセスプランを採用します。
オプティマイザーが特定の文に使用する最適化ゴールは、次の規則に従って決まります。
メインクエリブロックの FROM 句で、テーブルヒントが FASTFIRSTROW に設定されたテーブルが存在する場合、文は First-row 最適化ゴールを使用して最適化されます。
文の OPTION 句で optimization_goal オプションが設定されている場合、文はその設定を使用して最適化されます。
それ以外の場合、オプティマイザーは現在の optimization_goal オプションの設定を使用します。
最適化ゴールが First-row であっても、最初のローをすぐに返すことができるプランをオプティマイザーが見つけられない可能性があります。たとえば、DISTINCT、GROUP BY、または ORDER BY 句が存在するために実体化が必要な文で、必要な順序を実現するためのインデックスが存在しない場合は、All-rows 目標で最適化されます。
このオプションを All-rows (デフォルト) に設定すると、SQL Anywhere のクエリは最適化され、予測される合計検索時間が最短になるアクセスプランを選択します。PowerBuilder DataWindow アプリケーションなど、処理の前に結果セット全体が必要になるアプリケーションでは、optimization_goal を All-rows に設定するのが適切です。
![]() |
DocCommentXchange で意見交換できます
|
Copyright © 2012, iAnywhere Solutions, Inc. - SQL Anywhere 12.0.1 |