SELECT TOP 100 パーセントの活用: 未使用の機能に関する洞察
従来、SELECT TOP 100 PERCENT は、ビュー定義で制限を回避するために使用されてきました。このようなコンテキストでは ORDER BY を使用します。ただし、特定のコードベースでは、この機能が動的 SQL ステートメント内で奇妙に表示されます。この含めることに正当な理由はあるのでしょうか? それとも、TOP 100 PERCENT を除外するのと同じ結果が得られるだけなのでしょうか?
驚くべきことに、SELECT TOP 100 PERCENT は、「中間具体化」の領域で独自の用途を見つけました。この構造を利用することで、クエリ結果をキャッシュし、後続の実行を最適化することができました。 Adam Machanic の記事では、この手法についてわかりやすく解説しています。
この方法で SELECT TOP 100 PERCENT を使用する方法には本質的に問題はありませんが、細心の注意が必要であり、絶対に必要な場合にのみ使用する必要があります。特定の状況や環境要因に依存しているため、スキーマ、インデックス構造、または行数の微妙な変更に対して脆弱になり、予期せぬ予測不可能な動作につながる可能性があります。
わかりやすくするために、次の例を考えてみましょう。
無効化されました例:
SELECT foo From MyTable WHERE ISNUMERIC (foo) = 1 AND CAST(foo AS int) > 100
無効な例:
SELECT foo FROM (SELECT foo From MyTable WHERE ISNUMERIC (foo) = 1) bar WHERE CAST(foo AS int) > 100
有効な例 (SQL Server 2000 および 2005):
SELECT foo FROM (SELECT TOP 100 PERCENT foo From MyTable WHERE ISNUMERIC (foo) = 1 ORDER BY foo) bar WHERE CAST(foo AS int) > 100
さらに、SELECT TOP 100 PERCENT は、その範囲を SQL Server 2005 まで拡張し、次のような無制限の結果を可能にする可能性があります:
SELECT TOP 2000000000 ... ORDER BY...
以上がSQL Server で「SELECT TOP 100 PERCENT」を使用する理由: 必要悪または無用の構文?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。