一般的に、オプティマイザーは、クエリ結果を返すことを目的としたテンポラリテーブル作成を回避しようとします。これは、最初のローを返す前に、テンポラリテーブル全体を移植する必要があるからです。インデックスが存在する場合、オプティマイザーはまずこのインデックスを使用しようとします。テンポラリテーブルを作成するのは最後の手段としてのみです。
テンポラリテーブルは、アクセスプランによって、実行中にデータを格納するために、一時的なテーブル、つまりテンポラリワークテーブルとして使用されます。このテーブルが存在するのは、アクセスプランの実行中のみです。一般的に、テンポラリテーブルが使用されるのは、使用可能なメモリに中間結果が収まらない場合です。たとえば、次のような場合です。
サブクエリをアクセスプランの早い段階で評価する必要がある場合
テンポラリテーブルのデータが単一の接続に対してのみ保持される場合
クエリにインデックス以外のカラムに対する ORDER BY 句が含まれている場合
クエリにインデックス以外のカラムに対する GROUP BY 句が含まれている場合
作成したインデックスでテンポラリテーブルの作成を回避できるかどうかを予測することは困難です。そのため、クエリプランは必ずチェックし、作成したインデックスが Ultra Light クエリオプティマイザーによって実際に使用されているかどうかを確認する必要があります。
テンポラリテーブルの使用を避けるには、ORDER BY 句または GROUP BY 句で使用されるカラムでインデックスを使用します。
![]() |
DocCommentXchange で意見交換できます
|
Copyright © 2012, iAnywhere Solutions, Inc. - SQL Anywhere 12.0.1 |