2012-03-03 12 views
1

私は、共通の個人安全報告書またはISRフィールドを有するFDAのMedWatchシステムから3つのテーブルをリンクしています。人口統計(一意レコード)、薬品(一意レコード、人口統計レコードにリンクされています)、反応(1つ以上のレコード、それぞれ薬物または人口統計記録のいずれかにリンクされています)です。好ましいINNER JOIN連結配列

私の質問は、Reactions.ISRがDrugsまたはDemographicsテーブルのINNER JOINedになる可能性があることです。

など。することができる:

SELECT Demographics.Case, Demographics.ISR, Drugs.DrugName, Reactions.PT 
    FROM (Reactions INNER JOIN Drugs ON Reactions.ISR = Drugs.ISR) 
    INNER JOIN Demographics ON Drugs.ISR = Demographics.ISR 
人口<のリンク

- 薬物< - 反応階層

または:独立への薬物レコードと反応レコード(単数または複数)リンク

SELECT Demographics.Case, Demographics.ISR, Drugs.DrugName, Reactions.PT 
    FROM Reactions INNER JOIN (Drugs INNER JOIN Demographics ON Drugs.ISR = Demographics.ISR) 
    ON Reactions.ISR = Demographics.ISR 

人口統計レコード。

両方とも同じレコードセットを返しますが、ベストプラクティスとして1つのメソッドが優先されているかどうか疑問に思っています。すなわち、JOINシーケンスを変更することによってクエリ性能を改善することが可能であるか?

答えて

0

2つのクエリのパフォーマンスを比較するには、実行計画を確認する必要があります。例えば、この場合、同じプランを得て、それが問題ではないことが証明されるかもしれません。

0

どのようにクエリが最適化されるかは、データベースによって異なります。

内側の結合(およびwhere句)に関しては、最も制限の厳しいテーブル(または条件)から最初に開始し、次に「より広い」結合/条件にリンクすることが最善の方法です。

これらの結合はそれほど限定的ではない - すなわち、それ以上の条件は適用されないとすれば、おそらく同等であると考えられます。チェックする2つのアプローチのクエリプランを見てください。