Настройка сложного запроса - PullRequest
0 голосов
/ 06 ноября 2019

Работа над извлечением отчета и сложным запросом занимает 3 часа. Нужны предложения по настройке

, есть главная таблица, которая содержит записи 3M, и итерация занимает много времени из-за нескольких объединений

Таблицы:

  • Сотрудник
  • Отдел
  • Адрес
  • Paystubs
  • Налог

Таблица сотрудников имеет 3M записей, и при выполнении следующего запроса она принимаетоколо 3 часов, чтобы получить данные. Нужно получать данные о тех сотрудниках в одиночку, когда их данные изменились со вчерашнего дня на сегодняшний день

select 
    emp.employee_id || '|' || emp.int_acct_id || '|' || dpt.department_desc
    || '|' || dpt.start_date || '|' || dpt.end_date
    || '|' || dpt.productivity_percent || '|' || addr.street_addr 
    || '|' || addr.apt || '|' || addr.city  || '|' || addr.state
    || '|' || addr.country || '|' || addr.zip || '|' || pay_for_year 
    || '|' || total_paid || '|' || pay_for_current_year || '|' || w2_issue_flg
from employee emp
inner join (
  select int_acct_id from (
    select int_acct_id from employee 
    where last_updated_time between '03-nov-19' and '04-nov-19'
    union
    select int_acct_id from department 
    where last_updated_time between '03-nov-19' and '04-nov-19'
  ) dual
) a1 on emp.int_acct_id = a1.int_acct_id
left outer join (
  select department_desc, start_date, end_date, int_acct_id, 
    productivity_percent from department
) dpt on emp.int_acct_id = dpt.int_acct_id
left outer join (
  select addr_acct_id, employee_id, street_addr, apt, city, state, country, zip
  from address
) addr on emp.employee_id = addr.employee_id
left outer join (
  select a.pay_for_year, a.four_not_one as total_paid, 
    b.total_pay as pay_for_curren_year, a.int_acct_id from tax a, (
      select sum(total_pay) as total_pay, int_acct_id 
      from paystubs  where pay_year = (select cur_year from year_dat) 
      group by int_acct_id
    ) b
  where a.int_acct_id = b.int_acct_id(+)
) on a.int_acct_id = emp.int_acct_id

Есть ли какой-либо другой способ или метод, который мы могли бы использовать, чтобы сначала отфильтровать измененные записи в метке времени, а затемпроверьте другие значения. (Курсор здесь не вариант для меня) данные должны загружаться из базы данных Oracle на сервер AIX, и, следовательно, это требует времени. Также подсказки не помогают, я попробовал Leading / заказал оба и не повезло.

...