次のコードをテーブルまたは一時テーブルに挿入しようとすると、SYBASE ASE を使用してパフォーマンスの問題が発生します。
INSERT INTO #temp (Id)
SELECT TOP 100 a.Id
FROM TableA a
INNER JOIN TableB b ON a.Id = b.Id
WHERE a.SomeColumn = 'blah' and b.SomeColumn = 'Blah'
ORDER BY a.Id
WHERE 句はそれほど重要ではありません...重要なことは、SELECT クエリはそれ自体で一瞬で実行されますが、テーブルに挿入しようとするとすぐに 2 分かかります!!!!
クエリ プランを見ると、オプティマイザは推定行数が 100 であることを考慮していないようで、TableB のテーブル スキャンを実行します。select ステートメント自体は、TOP 100 が考慮された賢明な計画をレンダリングしているように見えますが、挿入により、オプティマイザーは非常に非効率的なルートを取るようです。このクエリに対して多くの順列を試しましたが、役に立ちませんでした。テーブル A と B は非常に大きく、TOP N は必須です。行数を100に設定しても同じ結果が得られました。
誰でもこれの回避策を提案できますか?
ありがとう