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

労働力人口の四半期計算の効率

    少なくともeffective_start_dateにインデックスがある場合は、適切なバリアントのようです。 およびeffective_end_date per_all_people_fのフィールド テーブル。

    このクエリの理想的なバリアントは

    です。
    create index x_per_all_people_search on per_all_people_f(   
      effective_start_date,
      effective_end_date, 
      person_id,  
      emp_flag
    )
    

    ただし、維持するにはコストがかかりすぎる可能性があります(ディスクコスト、挿入速度)。

    また、パッケージ本体のカーソルには、サブクエリと再利用関数呼び出しの結果が含まれている必要があります。

    cursor cur_var
    is 
      select 
        EMP_2012,
        EMP_2013,
        (EMP_2013 - EMP_2012) Diff
      from (
       select 
         function_name('01-MAR-2012','31-MAY-2012') EMP_2012,
         function_name('01-MAR-2013','31-MAY-2013') EMP_2013
       from dual
      );
    

    もちろん、最善の解決策は、コンテキストスイッチを最小限に抑え、単一のSQLクエリからすべての値を取得することです。また、カーソルに直接パラメータを指定することもできます:

    cursor cur_var(
      start_1 date, end_1 date, 
      start_2 date, end_2 date
    )
    is 
      select 
        EMP_2012,
        EMP_2013,
        (EMP_2013 - EMP_2012) Diff
      from (
       select 
         (
           select 
             count(distinct papf.person_id)
           from 
             per_all_people_f papf
           where 
             papf.emp_flag = 'Y'
             and 
             effective_start_date >= trunc(start_1)
             and 
             effective_end_date   <= trunc(end_1)
         ) EMP_2012,
         (
           select 
             count(distinct papf.person_id)
           from 
             per_all_people_f papf
           where 
             papf.emp_flag = 'Y'
             and 
             effective_start_date >= trunc(start_2)
             and 
             effective_end_date   <= trunc(end_2)
         ) EMP_2013
       from dual
      );
    

    私の見解では、関数/カーソルパラメータは一般的すぎるため、入力パラメータとして四半期数と比較に2年かかるラッパーを作成する方がよい場合があります。

    最後に、PL / SQLで使用する予定の結果(単一行を返すためだと思います)がカーソルをまったく使用しない場合は、出力パラメータを介して計算値を返すだけです。別の観点から、1つのカーソルで通年の四半期データを取得する必要がある場合は、すべての四半期をカウントして1つのクエリで比較する方が効率的です。




    1. ExcelデータをToad9.5テーブルにインポートする方法

    2. JPA Criteria API:mm / dd/yyyy形式で日付を取得する方法

    3. テーブルから動的な列のセットを選択し、それぞれの合計を取得します

    4. エラー2003(HY000):「127.0.0.1」のMySQLサーバーに接続できません(111)