ホームページ > データベース > mysql チュートリアル > SQL Server で「SELECT TOP 100 PERCENT」を使用する理由: 必要悪または無用の構文?

SQL Server で「SELECT TOP 100 PERCENT」を使用する理由: 必要悪または無用の構文?

Patricia Arquette
リリース: 2025-01-01 13:04:11
オリジナル
996 人が閲覧しました

Why Use `SELECT TOP 100 PERCENT` in SQL Server:  A Necessary Evil or Useless Syntax?

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート