SQLフィルタの基準を参加条件はwhere節がより効率的な
-
05-07-2019 - |
質問
って比較的単純なクエリの接合につ。の"場"の基準で表現できるものでは参加条件としての場を提供しています。ったよりも効率的です。
クエリは最大の売上高、営業マンから始まった。
事例1
select salesman.salesmanid, max(sales.quantity)
from salesman
inner join sales on salesman.salesmanid =sales.salesmanid
and sales.salesdate < salesman.promotiondate
group by salesman.salesmanid
事例2
select salesman.salesmanid, max(sales.quantity)
from salesman
inner join sales on salesman.salesmanid =sales.salesmanid
where sales.salesdate < salesman.promotiondate
group by salesman.salesmanid
注の場合1を欠いたwhere句全
RDBMSがSql Server2005
編集 の場合、二つの作品に参加基準のwhere句でした。salesdate < 一定の日でない任意の基準に入りのテーブルは変化するの答えです。
解決
っとしての性能を決定要因ここで、非常に正直、とは思わないが測定可能な性能差が二つの場合には、ですね。
私は常に使用する場合#2-なぜですか?なので私の意見だけを入れて、実際の基準を確立するとの二つのテーブルをJOIN条項-他のすべての組織に所属しの場を提供しています。
をうかがわせるものとなっているつも清潔でしかもそれが所属すると思う。
明らかにする場合があり、左外側joinの配置の基準が違いう意味でも結果は返された方の場合が対象から除外することが私のお勧めします。
Marc
他のヒント
きの実行計画推定法およびsqlプロファイラがどのようなクしています。
しかし、その意味的に同一の下にフードによるとこのSQL ServerのMVP:
http://www.eggheadcafe.com/conversation.aspx?messageid=29145383&threadid=29145379
する他のハードコードされた基準に加入。このSQLく読ました。
読みやすさきなどのデータをつけようがすべてのテーブルの基準がある。大諸表の基準が葬50その他の表現とするた記憶があります。
携帯性:できるだけコピーをチャンクの項目から貼り付けらいしか採用できる場所はない。しているとの結合には、任意の基準として安心してご利用いただけます。場合は常に使用する基準に参加の場合はそれらのテーブル、その後に記載しておくことは、参加するのです。
例えば:
FROM
table1 t1
JOIN table2 t2_ABC ON
t1.c1 = t2_ABC.c1 AND
t2_ABC.c2 = 'ABC'
が必要な場合に二列のテーブル2までをコピーしてブロックメモ帳検索/repalce"ABC"およびさきがけ、新しいブロックのコードを貼り付けも行っております。
追加:でもや変更は、内外の参加を気にせずに任意の基準と浮遊の場を提供しています。
私はWHERE節を厳重に実行時の基準が可能です。
として効率:いつexcecution速、そして皆さまには、冗長となります。まつやデバッグおよび再利用、そして希望のオプション1.
一つのことを言いたいよい知らせしたと..両方が同一の性能又は使用に関する基準 場所 条項が少し早くしていたが、その答え..
もっ識の違いの際に使用でき論理的なニーズ..
を使用する基準 月 条項ないフィルター/ページ内移動用のリの行を選択し、その代わりにjoinカラムがnullの提供条件に基づいて作成
を使用する基準 場所 条項はフィルター/飛行の結果
とは思わないだけで、有限の質問の回答につすべてに適用されます。の2は必ずしも交換可能-以降は一部のクエリー(一部の左に加わ)にあるをクリックします。異なる結果を基準に、vsのか。
お場合は、評価されます。にSSMSを眺めることができ推定と実際の実行計画の両方のこれらの問合せがいの第一歩るかを決定するには最適です。きもの時間-IO各セット統計の時間を設定しても、統計io)を-ともだけの情報を決定します。
の場合は疑問にお答いベットがめっちゃく同じクエリプラン-このような場合では問いませんが、その他いる可能性を異なる。
えてしまうことの差の2...
SET STATISTICS IO ON
SET STATISTICS TIME ON
select salesman.salesmanid,
max(sales.quantity)
from salesmaninner join sales on salesman.salesmanid =sales.salesmanid
and sales.salesdate < salesman.promotiondate
group by salesman.salesmanid
select salesman.salesmanid,
max(sales.quantity)
from salesmaninner join sales on salesman.salesmanid = sales.salesmanid
where sales.salesdate < salesman.promotiondate
group by salesman.salesmanid
SET STATISTICS TIME OFF
SET STATISTICS IO OFF
いflippantですが、その答えはいずれかのクエリのクエリ分析装置の最も効率的なプランです。
思うと同等のクエリ分析装置が同一製計画がいます。
に関する情報は見つかりませんでより効率的な利用の場ようとする方法は古い方法で(http://msdn.microsoft.com/en-us/library/ms190014.aspx).お見ることができる実行計画を見ても同じことをしているのです。
親の推定実行計画のアプリケーションエリアマネジメント!!ようにいいの慈しみ分析装置が外部サンプリング方式などこの限りではありません信託銀による推計値。したものではないでしょうかをお客様よりご提供いただいた作同じプランです。
の場合のみ変更に発展-文化の一つを与えてくれるよりよい計画のものと同じものを文化
またこの他の"効率"の投稿のようなことで双方誠実ポ)--このこのボトルネックに居住し、その後ハます。
ケース1(基準に参加)が良いの封入、封止は、通常は良いもの:減少しコピー/ペースト漏れ別のクエリー、減少しバグ以降の場合は変換はLEFT JOINと、増加の可読性(関連するものと、以下"ノイズ"のWHERE句).この場合、WHERE条項のみを捉えた主なテーブルの基準では基準が複数のテーブル