2016-06-01 8 views
1

同じ結果を出力する2つのクエリがあります。私は、2人のパフォーマンスに違いがあり、どちらを使うのが良いかを知りたいと思います。なぜ他のものより優れているのか、それとも同じ理由があるのか​​説明してください。2つのクエリ間のSQLパフォーマンス

Query2はQuery1よりも12ms高速ですが、サーバーの遅延がランダムに発生する可能性があります。例えば、もう一度それを実行すると、私はそれぞれ別の時間を得る。

クエリ1:タイム66ms

select  
    * 
from   
    table1, 
    table2, 
    table3, 
    table4, 
    table5, 
    table6, 
    table7 
where  
    table1.type1 = 402 and 
    table1.pid = table2.pid and 
    table1.aid = table3.aid and 
    table1.tid = table4.tid and 
    table4.type2 = table5.code and 
    table1.status = table6.code2 and 
    table7.eaid = table1.caid 

クエリ2:時間 - 54ms

select  
    * 
from 
    table1 
     join table2 on table2.pid= table1.pid 
     join table3 on table1.aid = table3.aid 
     join table4 on table1.tid = table4.tid 
     join table5 on table4.type2= table5.code 
     join table6 on table1.status= table6.code2 
     join table7 on table7.eaid= table1.caid 
where 
    table1.type1 = 402 
+0

質問に実際のクエリプランを追加してください。 –

+0

ここでhttp://programmers.stackexchange.com/questions/78225/using-join-keyword-or-not – jayvee

+0

これらは同じクエリのように見えますが、クエリ2はANSIに準拠しています。 –

答えて

2

これらのクエリのいずれかの間には本来の性能差はありません。

彼らはまったく同じ計画を得るでしょう。

異なる開始位置によって異なる計画が最初に見つかる可能性があり、「十分に良い」と判断される可能性がありますが、構文に固有のものではありません。

しかし、2番目のオプションを使用してください。最初のオプションでは、結合条件を逃して誤ったクロス結合を得るのは簡単です。また、セマンティクスが正しくないと判断した場合は、外部結合に変換する方が簡単です。

+0

私はクエリプランを見ましたが、どちらも同じです。私はJoinsを使うのが簡単だと分かっています。私はそのパフォーマンス面について確かに分かりませんでした。 – Stivan

関連する問題