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

JOINのON句で参照されるテーブルの順序は重要ですか?

    JOIN FROMでテーブルを正しい順序に並べることで、順序を強制できます。 条項:

    1. MySQLには、STRAIGHT_JOINという特別な句があります。 注文が重要になります。

      これは、b.idのインデックスを使用します :

      SELECT  a.Name, b.Status
      FROM    a
      STRAIGHT_JOIN
              b
      ON      b.ID = a.StatusID
      

      そして、これはa.StatusIDのインデックスを使用します :

      SELECT  a.Name, b.Status
      FROM    b
      STRAIGHT_JOIN
              a
      ON      b.ID = a.StatusID
      
    2. Oracleには特別なヒントORDEREDがあります JOINを強制する 注文:

      これは、b.idのインデックスを使用します または、bでハッシュテーブルを作成します :

      SELECT  /*+ ORDERED */
              *
      FROM    a
      JOIN    b
      ON      b.ID = a.StatusID
      

      そして、これはa.StatusIDのインデックスを使用します またはaにハッシュテーブルを作成します :

      SELECT  /*+ ORDERED */
              *
      FROM    b
      JOIN    a
      ON      b.ID = a.StatusID
      
    3. SQL Serverには、FORCE ORDERというヒントがあります。 同じことをするために:

      これは、b.idのインデックスを使用します または、bでハッシュテーブルを作成します :

      SELECT  *
      FROM    a
      JOIN    b
      ON      b.ID = a.StatusID
      OPTION (FORCE ORDER)
      

      そして、これはa.StatusIDのインデックスを使用します またはaにハッシュテーブルを作成します :

      SELECT  *
      FROM    b
      JOIN    a
      ON      b.ID = a.StatusID
      OPTION (FORCE ORDER)
      
    4. PostgreSQLの皆さん、ごめんなさい。 TODOリスト 言う:

      オプティマイザーのヒント(不要)

      オプティマイザーのヒントは、オプティマイザーの問題を回避するために使用されます。むしろ、問題を報告して修正してもらいたいと思います。

    比較の順序は、RDBMSでは関係ありません。 、AFAIK。

    私は個人的に常にどの列が検索されるかを推定し、この列を左側に配置しようとしますが(lvalueのように見えるため) 。

    この回答を参照してください 詳細については。



    1. SQLServerでサブクエリを使用する方法に関する簡単なガイド

    2. SELECTリストの他の場所でエイリアスを参照する

    3. postgresの名前変更データベースが機能しない

    4. PostgreSQLデータベースを保護する方法-10のヒント