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 の使用法 » クエリ処理 » クエリの最適化と実行 » クエリ実行アルゴリズム » アルゴリズムの種類 » ソート・アルゴリズム

 

ソート・アルゴリズム (Sort)

Sort は入力をメモリに読み込み、メモリ内でソートしてからソート結果を出力します。入力全体がメモリに収まらない場合は、複数のソート済み処理が作成されてからマージされます。ソートはすべての入力ローを読み込むまで、ローを返しません。ソートは入力ローをロックします。

利用可能なキャッシュ・メモリがほとんどない環境で Sort を実行すると、Sort が完了できない場合があります。この場合、Sort はインデックスベースのソート方式を使用して残りの入力を順序付けます。入力ローが読み込まれてワーク・テーブルに挿入され、ワーク・テーブルの順序付けカラムに基づいてインデックスが作成されます。この場合、ローは複合インデックス・スキャンを使用してワーク・テーブルから読み込まれます。このインデックスベースの方式は、かなり低速です。オプティマイザはクエリの実行中にメモリ不足を検出すると、Sort を使用したアクセス・プランの生成を避けます。メモリ不足のためにインデックスベースの方式が必要な場合は、パフォーマンス・カウンタの値が増分されます。このモニタを読むには、QueryLowMemoryStrategy プロパティまたは Windows パフォーマンス・モニタの [クエリ:メモリ不足時方式] カウンタを使用します。

Sort 演算子で使用できるメモリ容量は、サーバのマルチプログラミング・レベルとアクティブな接続の数によって異なります。SQL Anywhere でのスレッドデータベース・サーバのマルチプログラミング・レベルの設定を参照してください。

ソート・パフォーマンスは、ソート・キーのサイズ、ローのサイズ、入力の合計サイズの影響を受けます。多数のローの場合は、VALUES SENSITIVE カーソルを使用する方が低コストになることがあります。その場合、SELECT リストのカラムは、ソートに使用されるワーク・テーブルにはコピーされません。Sort では、出力ローがワーク・テーブルに書き込まれませんが、Sort の結果が実体化されてから、ローがアプリケーションに返されなければなりません。このため、オプティマイザは必要に応じてワーク・テーブルを追加します。