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

実行方法によっては、Oracleストアドプロシージャの実行時間が大幅に増加するのはなぜですか?

    異なるケース(ideまたはjavaプログラム)からnlsパラメーターを取得してみてください。それらは異なる必要があります

    select * from NLS_SESSION_PARAMETERS
    

    次に、ストアドプロシージャ内で、最速の場合と等しくなるように変数を設定します。

      execute immediate 'alter session set NLS_SORT=''SPANISH''';
    

    SPがすべてのnlsパラメータを取得したら。高速に実行されます。

    私は最近、Alterセッションで同様のケースがHibernateを介してクエリを遅くすることを発見しました。しかし、彼らの場合、彼らはパラメータを変更してから遅くなりました。

    調査したところ、パラメータNLS_COMP y NLS_SORTは、オラクルが文字列の実行計画をどのように使用するかに影響する可能性があることがわかりました(比較または順序付けの場合)

    NLS_COMPがLINGUISTICとして定義されている場合、NLS_SORTで定義されている言語を使用します。

    たとえば、NLS_COMP=LINGUISTICおよびNLS_SORT=BINARI_AIの場合、クエリは

    select * from table where string_column like 'HI%'
    

    内部的にはそれが行われます

    select * from table where  
    NLSSORT(string_column,'BINARI_AI') >= HEXTORAW('324242432')
    NLSSORT(string_column,'BINARI_AI') >= HEXTORAW('675757576')
    

    したがって、NLSSORT(column、'BINARI_AI')のインデックスがない場合は、非常に遅くなります。

    NLS_SORT =BINARY_AIを使用すると、順序付けと比較でアクセントと大文字と小文字が区別されなくなります。




    1. リモートで関連するテーブルから値をチェックするためのCONSTRAINT(結合などを介して)

    2. データベースをgit(バージョン管理)下に置くにはどうすればよいですか?

    3. 別のスキーマでデータベースを復元したい

    4. 2つの日付の間の各日付のレコード数を計算します