данные оракула из нескольких таблиц

*ОБНОВЛЕНИЕ

попробую еще раз объяснить ситуацию: у меня есть один датавит, который содержит всех клиентов и исходные платежи вместе со статусом и фискальным периодом в формате ггггммдд. статус должен сопоставляться со статусом в другой таблице, чтобы я получал только те имена клиентов и финансовые периоды, где status_datamart=status_table и status_table в ("неактивный", "активный"). эти данные теперь вставляются в таблицу под названием «inv», которая содержит: PORTFOLIO_INV, CLIENT_INV, ACCT_TYPE_INV, PERIOD, DESK, STATUS, PRIOR_OCA_CALC, PRINCIPAL, CUR_BAL

вторая витрина данных снова содержит клиента, финансовый_период, платежи (брутто и нетто), транзакцию_тип. один запрос используется для извлечения только тех записей из этой витрины данных, где тип txn соответствует другой таблице, а категория txn — «грубая». второй запрос имеет те же фильтры, что и выше, только категория txn теперь изменена на «net».

Причина, по которой 2 запроса получают брутто и нетто, заключается в том, что данные имеют следующий формат:

клиент1 | финансовый период| статус | валовой клиент2 | финансовый период| статус | валовой клиент1 | финансовый период| статус | чистый клиент3 | финансовый период| статус | валовой

поэтому я использую запрос один для хранения брутто в одной таблице «pmt»:

и второй запрос для сохранения в другую таблицу 'net': PORTFOLIO_NET,CLIENT_NET,ACCT_TYPE_NET,PERIOD_NET,DETAIL_TRANSACTION_TYPE_NET,DETAIL_DESK_AT_PMT_NET,DETAIL_STATUS_AT_NET,PRIOR_OCA_CALC_NET,DETAIL_AMOUNT_NET

ограничения: client_inv=client_pmt=client_net период= период_pmt=период=нетто

Надеюсь, поможет...


Я пишу запрос, который извлечет имя клиента, финансовый год и основную сумму из таблицы T1, сумму (текущие платежи) из другой таблицы T2 (для того же клиента и того же финансового периода) и сумму (нетто) из третьей таблицы ( для того же клиента, что и в T1 и T2). запрос занял 2132,78 секунды, чтобы выполнить около 3400 записей в T1, 939 в T2 и 103 в T3.

есть ли способ, которым я НЕ могу использовать соединения и просто быстро получать нужные мне данные? Общее количество записей будет варьироваться в каждой таблице в зависимости от того, какова была основная сумма и сколько платежей было получено.


person joiner    schedule 09.11.2011    source источник
comment
@joiner — опубликовать план запроса в дополнение к запросу. Когда вы говорите о 3400 записях в T1, вы утверждаете, что всего в T1 3400 строк? Или что вы извлекаете только 3400 строк из T1? Если вы имеете в виду, что вы извлекаете только 3400 строк, сколько строк в T1 вы не извлекаете (и то же самое для T2 и T3)?   -  person Justin Cave    schedule 10.11.2011
comment
на данный момент в t1 3400 строк. и объединение всех этих записей на основе имени клиента и периода   -  person joiner    schedule 10.11.2011


Ответы (2)


Вы пытались проанализировать, почему ваш запрос работает медленно?

Похоже, вам не нужно использовать соединения, а скорее объединение всех трех запросов. Это похоже на независимую функциональность.

Вам нужно использовать объединения, когда у вас есть таблица с именем contact и другая таблица с именем contact_address, где есть связанная информация с основной таблицей.

Если ваша информация не связана, вы можете получить результаты через объединение, где структура ваших результатов одинакова.

person r0ast3d    schedule 09.11.2011
comment
я использовал ОБЪЕДИНЕНИЕ, но результатом было только имя клиента, период и сумма (основная сумма), он опустил сумму (платежи) и сумму (нетто) - person joiner; 10.11.2011
comment
выберите client0, период0, сумму (основной) из группы temp_inv по client0, союз период0 выберите client_pmt, период1, сумму (detail_amount_pmt) из группы temp_pmt по client_pmt, союз период1 выберите client_net, период2, сумму (detail_amount_net) из группы temp_pmt_net по client_net, период2 - person joiner; 10.11.2011

2132 секунды для томов данных, которые вы предлагаете, похоже, указывают на то, что критерии соединения могут быть неточными, и вы можете увидеть MERGE JOIN CARTESIAN в своем плане выполнения. Если вы отследите свой запрос и опубликуете вывод tkprof или просто объясните SQL и опубликуете план, это будет полезно при диагностике проблемы.

person Jai Bathija    schedule 10.11.2011
comment
выберите client0, период0, сумму (основной) из группы temp_inv по client0, союз период0 выберите client_pmt, период1, сумму (detail_amount_pmt) из группы temp_pmt по client_pmt, союз период1 выберите client_net, период2, сумму (detail_amount_net) из группы temp_pmt_net по client_net, период2 - person joiner; 10.11.2011