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

SQL Anywhere 11.0.1 (日本語) » SQL Anywhere サーバ - SQL リファレンス » SQL の使用 » SQL 言語の要素 » 探索条件

 

明示的な選択性推定

SQL Anywhere は、統計情報を基に各文の実行に最も効率的な方法を判別します。SQL Anywhere は、それらの統計を自動的に収集、更新します。これらの統計は、データベースのシステム・テーブル ISYSCOLSTAT に永久的に格納されます。ある文の処理中に収集された統計は、以降の文の効率的な実行方法を見いだすときに使用できます。

場合によっては、統計情報が不正確になったり、関連統計情報が使用不能になったりすることがあります。このような状況がもっとも発生しやすいのは、大量のデータが追加、更新、または削除されてから実行されたクエリが少ない場合です。このような場合は、CREATE STATISTICS 文を実行します。CREATE STATISTICS 文を参照してください。

特定の実行プランに問題がある場合は、オプティマイザに関するヒントを使用して、特定のインデックスの使用を要求できます。詳細については、FROM 句を参照してください。

ただし、特異な状況では、この方法では効果的でないことがあります。そのような場合、明示的な選択性推定を指定することでパフォーマンスを改善できることがあります。

オプティマイザは対象となる各テーブルについて、結果の一部となるローの数を推測します。条件の成功する確率がオプティマイザの推定とは異なることがあらかじめ判明している場合、ユーザ推定を明示的に探索条件として指定できます。

予測値はパーセントで表します。この値は、正の整数または小数です。

警告

進行ベースで使用される文には、できるかぎり明示的な推定を指定しないようにしてください。データが変更されると、明示的な推定が不正確になり、オプティマイザが誤って不適切なプランを選択することがあります。明示的な選択性推定を使用する場合は、数値が正確であることを確認してください。たとえば、0% または 100% の値を指定してインデックスを強制的に使用することはしないでください。

ユーザ推定を無効にするには、データベース・オプション user_estimates を Off に設定します。user_estimates のデフォルト値は Override-Magic です。これは、オプティマイザが条件に MAGIC (デフォルト) 選択性値を使用する場合にのみ、ユーザ提供の選択性推定が使用されることを意味します。オプティマイザは、述部の選択性を正確に予測できない場合の最終手段として MAGIC 値を使用します。

ユーザ定義の選択性推定を無効にする方法の詳細については、user_estimates オプション [データベース]を参照してください。

統計の詳細については、オプティマイザの推定とカラム統計を参照してください。

次のクエリでは、ShipDate 値の 1% が 2001/06/30 より遅くなる予測値を出力します。

SELECT  ShipDate
   FROM  SalesOrderItems
WHERE ( ShipDate > '2001/06/30', 1 )
ORDER BY ShipDate DESC;

次のクエリでは、ローの 0.5% が条件を満たす予測値を出力します。

SELECT *
   FROM Customers c, SalesOrders o
WHERE (c.ID = o.CustomerID, 0.5);

小数を使用すると、ジョインや大きなテーブルのユーザ予測値はさらに正確になります。