2017-01-31 14 views
0

私は2つのテーブルA、Bを持っていますが、IDフィールドは共通キーです。 以下のいずれかのクエリを使用すると、結果は同じになります。2クエリ間の性能比較

select * from A,B where A.ID=B.ID and A.Id = 10; 
select * from A inner join B on A.ID=B.ID where A.Id = 10; 

どのクエリがパフォーマンス面で優れているのか、その理由を教えてください。

+6

私はあなたの説明計画を見てみるつもりですが、クエリは絶対に同じで、構文がまったく違います。ほとんどの場合、明示的な結合構文を使用するよう指示されます。どのDBMSを使用していますか? – Jeremy

+1

通常、パフォーマンスに違いはありません。 join条件を忘れた場合、構文エラーが発生するため、内部結合構文を使用することをお勧めします。他のケースでは、結合条件を忘れた場合、デカルト積分を得ます。 – Natrium

+0

@Jeremy 'explain plan' <=あなたは'実行計画 'を意味すると思いますか? – Igor

答えて

2

これらはおおよそ同じように実行する必要があります。ただし、最初のクエリはSQLの反パターンであり、決して使用しないでください。暗黙的な結合は、問題を引き起こすことがあります。なぜなら、より複雑になると、where節が誤って省略されることが多いからです。これは、明示的な結合構文を使用するほとんどのデータベースでは構文チェックに合格しません。事故によってwhere句がクロスジョインを引き起こし、その結果が正しくないという欠点があります。

さらに、左側の結合に1つの結合を変更し、明示的な結合を使用する必要がある場合は、メンテナンス後の結果が矛盾することがあります(特に、暗黙的な左結合構文がもはや許可されず、そして決して使用されるべきではありません)、ジョインを混合することになります(ほとんどのクエリで共通のように複数のジョインがある場合)。

さらに、実際にクロスジョインをしたい場合は、後でメンテナンスを行う人がそれを知り、コードが間違っていて内部結合が必要と思われる可能性がありません。明示的な結合を使用すると、意図が明確になります。