sensitive カーソルは、読み取り専用か更新可能なカーソル・タイプで使用されます。
このカーソルには、sensitive なメンバシップ、順序、値が指定されています。
sensitive カーソルは、ISO/ANSI 規格の sensitive カーソル定義と ODBC の動的カーソルに対応しています。
インタフェース | カーソル・タイプ | コメント |
---|---|---|
ODBC、ADO/OLE DB | 動的 | |
Embedded SQL | SENSITIVE | 要求されているワーク・テーブルがなく、prefetch オプションが Off に設定されている場合は、DYNAMIC SCROLL カーソルの要求にも応じて提供される |
JDBC | SENSITIVE | sensitive セマンティックは、iAnywhere JDBC ドライバで完全にサポートされる |
sensitive カーソルでのプリフェッチは無効です。カーソルを使用した変更や他のトランザクションからの変更など、変更はどれもカーソルを使用して表示できます。上位の独立性レベルでは、ロックを実行しなければならないという理由から、他のトランザクションで行われた変更のうち、一部が非表示になっている場合もあります。
カーソルのメンバシップ、順序、すべてのカラム値に対して加えられた変更は、すべて表示されます。たとえば、sensitive カーソルにジョインが含まれており、基本となるテーブルの 1 つにある値がどれか 1 つでも修正されると、その基本のローで構成されたすべての結果ローには新しい値が表示されます。結果セットのメンバシップと順序はフェッチのたびに変更できます。
sensitive カーソルは常に、クエリの選択基準に合ったローを、ORDER BY 句が指定した順序で返します。更新は、結果セットのメンバシップ、順序、値に影響する場合があります。
sensitive カーソルを実装するときには、sensitive カーソルの稼働条件によって、次のような制限が加えられます。
ローのプリフェッチはできない。プリフェッチされたローに加えた変更は、カーソルを介して表示されないからです。これは、パフォーマンスに影響を与えます。
sensitive カーソルを実装する場合は、作成中のワーク・テーブルを使用しない。ワーク・テーブルとして保管されたローに加えた変更はカーソルを介して表示されないからです。
ワーク・テーブルの制限事項では、オプティマイザによるジョイン・メソッドの選択を制限しない。これは、パフォーマンスに影響を及ぼす可能性があります。
クエリによっては、カーソルを sensitive にするワーク・テーブルを含まないプランをオプティマイザが構成できない。
通常、ワーク・テーブルは、中間結果をソートしたりグループ分けしたりするときに使用されます。インデックスからローにアクセスできる場合、ソートにワーク・テーブルは不要です。どのクエリがワーク・テーブルを使用するかを正確に述べることはできませんが、次のようなクエリでは必ずワーク・テーブルを使用します。
UNION クエリ。ただし、UNION ALL クエリでは必ずしもワーク・テーブルは使用されません。
ORDER BY 句を持つ文。ただし、ORDER BY カラムにはインデックスが存在しません。
ハッシュ・ジョインを使って最適化されたクエリ全般。
DISTINCT 句または GROUP BY 句を必要とする多くのクエリ。
この場合、SQL Anywhere は、アプリケーションにエラーを返すか、カーソル・タイプを asensitive に変更して警告を返します。
クエリ最適化とワーク・テーブル使用の詳細については、クエリの最適化と実行を参照してください。
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |