sql >> データベース >  >> RDS >> Sqlserver

ANSIJOINクエリと非ANSIJOINクエリのパフォーマンスは異なりますか?

    2つのクエリは同じですが、2つ目はANSI-92 SQL構文であり、1つ目は結合句が組み込まれていない古いSQL構文です。確認することもできますが、まったく同じ内部クエリプランを生成する必要があります。

    いくつかの理由から、ANSI-92構文を使用する必要があります

    • JOIN句を使用すると、リレーションシップロジックがフィルターロジック(WHERE)から分離されるため、よりクリーンで理解しやすくなります。
    • この特定のクエリでは問題ありませんが、古い外部結合構文(+を使用)があいまいで、クエリ結果が実装に依存する、またはクエリをまったく解決できない状況がいくつかあります。これらはANSI-92では発生しません
    • ほとんどの開発者とdbaは最近ANSI-92を使用するため、標準に従う必要があるため、これは良い習慣です。確かに、最新のクエリツールはすべてANSI-92を生成します。
    • @gbnが指摘しているように、偶発的なクロス結合を回避する傾向があります。

    私自身、ANSI-92にしばらく抵抗しました。これは、SQLを、使用されるすべてのテーブルの一括デカルト結合とそれに続くフィルタリング操作として想定する方が簡単であるため、古い構文にはわずかな概念上の利点があるためです。 SQLクエリが実行していることを把握するため。しかし、私は数年前に時代とともに動く必要があると判断し、比較的短い調整期間の後、今ではそれを強く好みます-主に上記の最初の理由のためです。 ANSI-92構文から逸脱する必要がある、またはオプションを使用しない必要がある唯一の場所は、暗黙的に危険な自然結合を使用することです。



    1. SQLServerデータベースでID列を持つすべてのテーブルを検索する方法-SQLServer/T-SQLチュートリアルパート45

    2. MySQLで過去7日間のレコードを取得する方法

    3. OBJECTPROPERTY()を使用して、SQLServerでテーブルに外部キーがあるかどうかを確認します

    4. SQLSTATE[HY000][1045]CakePHPを使用したユーザー'username'@'localhost'のアクセスが拒否されました