どっちが速い


12

どちらが速いですか

SELECT * FROM X INNER JOIN Y ON x.Record_ID = y.ForignKey_NotIndexed_NotUnique

または

SELECT * FROM X INNER JOIN Y ON y.ForignKey_NotIndexed_NotUnique = x.Record_ID

回答:


17

違いはありません。mssqlのクエリエンジン(およびほとんどのデータベースエンジン)は、両方に対して同じクエリプランを作成します。これを確認するには、SQL Workbenchで推定および実際のクエリプランを表示します。


10

オプティマイザは同一のJOINであるため、これを無視します。

SQLは手続き型ではなく宣言型であり、クエリは行ごとではなくtotoで評価されます。


4

独自のデータを使用して質問に答えるテストを作成してみませんか?

データベースプログラミングについて学べることが1つしかない場合、1つのサイズがすべてのソリューションに適合するとは限りません。もちろんベストプラクティスもありますが、全体的には常にケースバイケースです。

これを言う理由は、リレーションデータベースクエリでは、すべてのアプローチに適合するサイズが1つではないことが多いためです。データを追跡する方法を決定するプランナーが存在するため、同じクエリは、プランナーがいつでも利用可能な情報をどのように選択したかに応じて、高速または超低速になります。たとえば、データを検索または挿入するかどうか、およびクエリの実行中に他のユーザーがシステムをどのように使用するかによって、インデックスが1か月後と1か月後の最悪の敵になることがあります。そのため、このクエリがどのように実行されるかをユースケースで証明するテストを作成することを常にお勧めします。その場合でも、結果は時間の経過とともに変化する可能性があり、データと使用状況の変化に応じて最適化に戻ります。

stackoverflowから得られる答えは、あなたの環境だけが提供できる現実の答えではなく、教科書の答えになると思います。そして、最終的に重要なのはあなたの現実世界の結果です。

ここで表示している単純なクエリは、両方とも同じパフォーマンスである必要があります。しかし、それでも私はそれをテストし、あなたが質問をしているならそれを証明すると言います。私は私のものを含む誰もが答えを信頼する前に、結果を信頼します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.