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

Oracleクエリの最適化

    まず、distinctは必要ありません 。クエリは次のように記述できます:

    select * 
      from [email protected] 
     where column1 in (
              select column2 
                from [email protected] 
               where column3 > 0
                      ) 
    order by column1
    

    第二に、それを書くには(少なくとも)さらに2つの方法があります。 JOINのいずれか :

    select t1.* 
      from [email protected] t1
      join [email protected] t2
     where t2.column2 = t1.column1
       and t2.column3 > 0 
    group by
           t1.id, t1.column1, ... 
    
    order by t1.column1
    

    または(私の好み)EXISTS

    select t1.* 
      from [email protected] t1 
     where exists
           ( select *
               from [email protected] 
              where t2.column2 = t1.column1
                and t2.column3 > 0
                      ) 
    order by column1
    

    いずれにせよ、それらすべての実行計画を確認する必要があります。

    table1.column1にインデックスがある場合、パフォーマンスは最高になると思います。 およびtable2の場合 、column2のインデックス または(column3, column2)の複合インデックス



    1. @DataJpaTestのSpringBoot1.4.1で組み込みH2DBにmode=mysqlを追加するにはどうすればよいですか?

    2. TSQLのヌル文字リテラルとは何ですか?

    3. データベースのインポートで渡されるスクリプトタイムアウトの指定

    4. 条件に基づいて2番目のテーブルのレコード数とともに2つのテーブルを結合します