2

これは一般的な質問であり、特定の自分のデータベースに関するものではありません。

データベースの簡単な例を次に示します。簡単にするために、データ型は重要ではないので割愛します。

テーブルアニマル:

ID, Name, Specie, OwnerID

テーブルの所有者:

ID, Name, Street, City, Country

もしそうなら、パフォーマンスに違いはありますか?

SELECT o.Name
FROM [Animals] a
INNER JOIN (SELECT ID, Name FROM [Owner]) o ON o.ID = a.OwnerID

単にではなく

SELECT o.Name
FROM [Animals] a
INNER JOIN [Owner] o ON o.ID = a.OwnerID

だから、私はテーブル全体に行かないので、パフォーマンスが向上する可能性があると考えていました. しかし、SQL は内部的にほぼ同じことを行うのに十分スマートである可能性もあると思います。

独自のデータベースで測定してみましたが、フロア ノイズだけではないことを確認できるほど大きな違いは測定できませんでした。

4

1 に答える 1

4

パフォーマンスの違いがあるかどうかは、SQL サーバーが使用しているクエリ プランに依存します。これは、インデックス、外部キー制約、およびデータ型を含む特定のテーブル構造に依存します。これは、所有するデータの量とその分散方法によっても変わる可能性があります。

投稿した 2 つのクエリについて、この比較的単純なテーブル構造とデータを想定すると、両方のクエリには以下に示す実行プランがあります。つまり、SQL Server は両方に対してこの同じアルゴリズムに従いました。

サンプル実行計画

Sql Server Management Studio を使用してこれらのクエリを実行すると、このようなツリーを取得できます。「Include Actual Execution Plan」というツールバー ボタンを探して有効にし、再度実行します。通常の [結果] タブと [メッセージ] タブに加えて、[実行計画] タブが表示され、SQL Server が選択したアルゴリズムが視覚的に表示されます。2 つのプランを比較すると、SQL が 2 つのクエリに対して同じように動作しているかどうかがわかります。

プランとその意味の詳細については、StackOverflow: how to read a execution plan in SQL Server をご覧ください。

于 2013-11-05T11:07:08.603 に答える