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

SQL Anywhere 12.0.1 » SQL Anywhere サーバー SQL の使用法 » データの問い合わせと修正 » クエリ » 高度:クエリ最適化 » オプティマイザーの仕組み

 

選択性推定ソース

任意の述部で、オプティマイザーは選択性推定の次のいずれかのソースを使用できます。選択されたソースは、クエリのグラフィカルな長いプランに示されます。

  • Statistics   オプティマイザーは、格納されたカラム統計を使用して選択性推定を計算できます。述部で定数が使用されている場合、格納された統計情報を使用できるのは、定数の選択性が統計情報に格納されるだけ重大な数値であるときだけです。

    たとえば、述部 EmployeeID > 100 では、EmployeeID カラムの統計情報が存在する場合、カラム統計を選択性推定ソースとして使用できます。

  • Join   オプティマイザーは、参照整合性制約、一意性制約、またはジョインヒストグラムを使用して選択性推定を計算できます。ジョインヒストグラムは、T.X カラムおよび R.X カラムの使用可能な統計情報から T.X=R.X の形式の述部に対して計算されます。

  • Column-column   選択性ソースとして使用できる参照整合性制約、一意性制約、またはジョインヒストグラムがないジョインの場合、オプティマイザーは選択性ソースとして、ジョインの結果セットの推定ロー数を 2 つのテーブルの直積のロー数で割った値を使用できます。

  • Column   オプティマイザーは、カラム統計に格納されたすべての値の平均値を使用できます。

    たとえば、述部 DepartmentName = expression の選択性は、expression が定数でない場合、平均値を使用して計算できます。

  • Index   オプティマイザーは、インデックスを調査して選択性推定を計算できます。通常、インデックスは、カラム統計などの選択性推定の他のソースが使用できない場合に選択性推定に使用されます。

    たとえば、述部 DepartmentName = 'Sales' では、オプティマイザーはカラム DepartmentName で定義されたインデックスを使用して Sales の値を持つローの数を推定できます。

  • User   user_estimates データベースオプションが Disabled に設定されていない場合、オプティマイザーはユーザーが提供する選択性推定を使用できます。

  • Guess   使用できる適切なインデックスがない場合、参照先カラムの統計情報が収集されていない場合、または述部が複雑である場合、オプティマイザーは最も妥当な推測を行って選択性推定を計算できます。この場合は、各タイプの述部に組み込み規則が定義されます。

  • Computed   たとえば、選択性を乗算するか、加算して選択性推定が計算された場合、非常に複雑な述部では、たとえば、選択性推定を 100% に設定し、選択性ソースを Computed に設定できます。

  • Always   述部が常に true の場合、選択性ソースは 'Always' になります。たとえば、述部 1=1 は常に true です。

  • Combined   上記の複数のソースを組み合わせて選択性推定が計算される場合、選択性ソースは 'Combined' になります。

  • Bounded   SQL Anywhere が選択性推定に上限か下限またはその両方を設定した場合、選択性ソースは 'Bounded' になります。たとえば、限界は、推定値が 100% を超えたり、選択性が 0% より小さくなったりしないことを保証するために設定されます。

 参照