Я пытаюсь оптимизировать следующий запрос Teradata. Кто-нибудь может это поинтересоваться. Для получения записей требуется много времени.Нужно оптимизировать запрос Teradata
select top 100 I.item_sku_nbr,L.loc_nbr,MIS.MVNDR_PRTY_ID from
QA_US_MASTER_VIEWS.item I,
qa4_US_MASTER_VIEWS.location L,
qa4_US_MASTER_VIEWS.item_str IST,
qa4_US_MASTER_VIEWS.mvndr_item_str MIS
where MIS.str_LOC_ID = L.loc_id and
mis.str_loc_id = IST.str_loc_id and
IST.str_loc_id = L.loc_id and
MIS.ITEM_STAT_CD = IST.ITEM_STAT_CD and
IST.ITEM_ID = I.ITEM_ID and
MIS.ITEM_ID = IST.ITEM_ID and
I.ITEM_STAT_CD = 100 and
IST.curr_rmeth_cd = 2 and
MIS.curr_dsvc_typ_cd = 3 and
MIS.OK_TO_ORD_FLG = 'Y' and
MIS.EFF_END_DT = DATE '9999-12-31' and
IST.EFF_END_DT = DATE '9999-12-31' and
MIS.ACTV_FLG ='Y' and
IST.ACTV_FLG ='Y' and I.ACTV_FLG='Y'
Объяснить план QA_US_MASTER.LOCATION:
1) Во-первых, мы фиксируем QA_US_MASTER.LOCATION в виде qa4_US_MASTER_VIEWS.Location для доступа.
2) Далее, мы делаем все-AMPS ПОЛУЧИТЬ шаг от QA_US_MASTER.LOCATION в qa4_US_MASTER_VIEWS.Location зрения путем все-строк сканирования без каких-либо остаточных условий во золотника 1 (group_amps), который является построен локально на AMP. Размер Spool 1 оценивается с высокой достоверностью и составляет 10 903 строки (1,613,644 байт). Расчетное время для этого шага составляет 0,01 секунды.
3) Наконец, мы отправляем шаг КОНЕЦ ОПЕРАЦИИ ко всем включенным AMP при обработке запроса.
-> Содержимое Spool 1 отправляется обратно пользователю в результате заявления 1. Общее расчетное время составляет 0,01 секунды.
Объяснить план qa4_US_MASTER_VIEWS.item_str:
1) Во-первых, мы фиксируем QA_US_MASTER.item_str ввиду qa4_US_MASTER_VIEWS.item_str доступа.
2) Далее, мы делаем все-AMPS ПОЛУЧИТЬ шаг от QA_US_MASTER.item_str в qa4_US_MASTER_VIEWS.item_str зрения путем все-строк сканирования без каких-либо остаточных условий во золотника 1 (group_amps), который является построен локально на AMP. Таблица ввода не будет кэшироваться в памяти , но она имеет право на синхронизированное сканирование. Результат файл спула не будет кэшироваться в памяти. Размер Spool 1 равен с низкой достоверностью в размере 1 229 047 917 строк ( 325,697,698,005 байт). Расчетное время для этого шага - 4 минут и 51 секунда.
3) Наконец, мы отправляем шаг КОНЕЦ ОПЕРАЦИИ ко всем включенным AMP при обработке запроса.
-> Содержимое Spool 1 отправляется обратно пользователю в результате заявления 1. Общее расчетное время составляет 4 минуты и 51 секунду.
Объяснить план QA_US_MASTER.ITEM:
1) Во-первых, мы фиксируем QA_US_MASTER.ITEM в виде qa4_US_MASTER_VIEWS.item для доступа.
2) Далее, мы делаем все-AMPS ПОЛУЧИТЬ шаг от QA_US_MASTER.ITEM в зрения qa4_US_MASTER_VIEWS.item путем все-строк сканирования без каких-либо остаточных условий во золотника 1 (group_amps), который построен локально на AMP. Размер Spool 1 оценивается с высокой достоверностью и составляет 1 413 284 строки (357 560 852 байта).Расчетное время для этого шага составляет 0,40 секунды.
3) Наконец, мы отправляем шаг КОНЕЦ ОПЕРАЦИИ ко всем включенным AMP при обработке запроса.
-> Содержимое Spool 1 отправляется обратно пользователю в результате операции 1. Общее расчетное время составляет 0,40 секунды.
Объяснить план QA_US_MASTER.MVNDR_ITEM_STR:
1) Во-первых, мы фиксируем QA_US_MASTER.MVNDR_ITEM_STR ввиду qa4_US_MASTER_VIEWS.mvndr_item_str доступа.
2) Далее, мы делаем все-AMPS ПОЛУЧИТЬ шаг от QA_US_MASTER.MVNDR_ITEM_STR ввиду qa4_US_MASTER_VIEWS.mvndr_item_str путем все-строк сканирования с нет остаточных условий в золотника 1 (group_amps), который построен локально на AMP. Таблица ввода не будет кэшироваться в памяти, , но она имеет право на синхронизированное сканирование. Результат spool файл не будет сохранен в памяти. Размер Spool 1 равен с высокой степенью достоверности, чтобы быть 1 316 279 746 строк ( 327 753 656 754 байта). Расчетное время для этого шага - 6 минут и 4 секунды.
3) Наконец, мы отправляем шаг КОНЕЦ ОПЕРАЦИИ ко всем включенным AMP при обработке запроса.
-> Содержимое Spool 1 отправляется обратно пользователю в результате заявления 1. Общее расчетное время составляет 6 минут и 4 секунды.
Объяснить план для Всего запросов:
1) First, we lock QA_US_MASTER.ITEM in view QA_US_MASTER_VIEWS.item
for access, we lock QA_US_MASTER.LOCATION in view
qa4_US_MASTER_VIEWS.location for access, we lock
QA_US_MASTER.MVNDR_ITEM_STR in view
qa4_US_MASTER_VIEWS.mvndr_item_str for access, and we lock
QA_US_MASTER.item_str in view qa4_US_MASTER_VIEWS.item_str for
access.
2) Next, we execute the following steps in parallel.
1) We do an all-AMPs RETRIEVE step from QA_US_MASTER.LOCATION in
view qa4_US_MASTER_VIEWS.location by way of an all-rows scan
with no residual conditions into Spool 3 (all_amps)
(compressed columns allowed), which is duplicated on all AMPs.
The size of Spool 3 is estimated with high confidence to be
1,013,979 rows (20,279,580 bytes). The estimated time for
this step is 0.03 seconds.
2) We do an all-AMPs RETRIEVE step from QA_US_MASTER.ITEM in
view QA_US_MASTER_VIEWS.item by way of an all-rows scan with
a condition of ("(QA_US_MASTER.ITEM in view
QA_US_MASTER_VIEWS.item.ITEM_STAT_CD = 100) AND
(QA_US_MASTER.ITEM in view QA_US_MASTER_VIEWS.item.ACTV_FLG =
'Y')") into Spool 4 (all_amps) (compressed columns allowed)
fanned out into 14 hash join partitions, which is duplicated
on all AMPs. The size of Spool 4 is estimated with low
confidence to be 30,819,363 rows (678,025,986 bytes). The
estimated time for this step is 0.81 seconds.
3) We do an all-AMPs JOIN step from Spool 3 (Last Use) by way of an
all-rows scan, which is joined to QA_US_MASTER.item_str in view
qa4_US_MASTER_VIEWS.item_str by way of an all-rows scan with a
condition of
("(QA_US_MASTER.item_str in view
qa4_US_MASTER_VIEWS.item_str.CURR_RMETH_CD = 2) AND
((QA_US_MASTER.item_str in view
qa4_US_MASTER_VIEWS.item_str.EFF_END_DT = DATE '9999-12-31') AND
(QA_US_MASTER.item_str in view
qa4_US_MASTER_VIEWS.item_str.ACTV_FLG = 'Y'))"). Spool 3 and
QA_US_MASTER.item_str are joined using a dynamic hash join, with a
join condition of ("QA_US_MASTER.item_str.STR_LOC_ID = LOC_ID").
The input table QA_US_MASTER.item_str will not be cached in memory.
The result goes into Spool 5 (all_amps) (compressed columns
allowed), which is built locally on the AMPs into 14 hash join
partitions. The size of Spool 5 is estimated with no confidence
to be 69,133,946 rows (2,419,688,110 bytes). The estimated time
for this step is 1 minute and 8 seconds.
4) We do an all-AMPs JOIN step from Spool 4 (Last Use) by way of an
all-rows scan, which is joined to Spool 5 (Last Use) by way of an
all-rows scan. Spool 4 and Spool 5 are joined using a hash join
of 14 partitions, with a join condition of ("(ITEM_ID = ITEM_ID)
AND (ACTV_FLG = ACTV_FLG)"). The result goes into Spool 6
(all_amps) (compressed columns allowed), which is redistributed by
the hash code of (QA_US_MASTER.item_str.STR_LOC_ID,
QA_US_MASTER.item_str.ITEM_STAT_CD, QA_US_MASTER.item_str.ITEM_ID,
QA_US_MASTER.ITEM.ITEM_ID, QA_US_MASTER.LOCATION.LOC_ID) to all
AMPs into 33 hash join partitions. The size of Spool 6 is
estimated with no confidence to be 36,434,893 rows (1,603,135,292
bytes). The estimated time for this step is 9.11 seconds.
5) We do an all-AMPs RETRIEVE step from QA_US_MASTER.MVNDR_ITEM_STR
in view qa4_US_MASTER_VIEWS.mvndr_item_str by way of an all-rows
scan with a condition of ("(QA_US_MASTER.MVNDR_ITEM_STR in view
qa4_US_MASTER_VIEWS.mvndr_item_str.CURR_DSVC_TYP_CD = 3) AND
((QA_US_MASTER.MVNDR_ITEM_STR in view
qa4_US_MASTER_VIEWS.mvndr_item_str.EFF_END_DT = DATE '9999-12-31')
AND ((QA_US_MASTER.MVNDR_ITEM_STR in view
qa4_US_MASTER_VIEWS.mvndr_item_str.ACTV_FLG = 'Y') AND
(QA_US_MASTER.MVNDR_ITEM_STR in view
qa4_US_MASTER_VIEWS.mvndr_item_str.OK_TO_ORD_FLG = 'Y')))") into
Spool 7 (all_amps) (compressed columns allowed) fanned out into 33
hash join partitions, which is redistributed by the hash code of (
QA_US_MASTER.MVNDR_ITEM_STR.ITEM_ID,
QA_US_MASTER.MVNDR_ITEM_STR.STR_LOC_ID,
QA_US_MASTER.MVNDR_ITEM_STR.ITEM_STAT_CD,
QA_US_MASTER.MVNDR_ITEM_STR.ITEM_ID,
QA_US_MASTER.MVNDR_ITEM_STR.STR_LOC_ID) to all AMPs. The input
table will not be cached in memory, but it is eligible for
synchronized scanning. The size of Spool 7 is estimated with no
confidence to be 173,967,551 rows (5,914,896,734 bytes). The
estimated time for this step is 2 minutes and 23 seconds.
6) We do an all-AMPs JOIN step from Spool 6 (Last Use) by way of an
all-rows scan, which is joined to Spool 7 (Last Use) by way of an
all-rows scan. Spool 6 and Spool 7 are joined using a hash join
of 33 partitions, with a join condition of ("(STR_LOC_ID =
STR_LOC_ID) AND ((ITEM_STAT_CD = ITEM_STAT_CD) AND ((ITEM_ID =
ITEM_ID) AND ((ACTV_FLG = OK_TO_ORD_FLG) AND ((ACTV_FLG = ACTV_FLG)
AND ((EFF_END_DT = EFF_END_DT) AND ((ACTV_FLG = ACTV_FLG) AND
((OK_TO_ORD_FLG = ACTV_FLG) AND ((ITEM_ID = ITEM_ID) AND
(STR_LOC_ID = LOC_ID)))))))))"). The result goes into Spool 2
(all_amps) (compressed columns allowed), which is built locally on
the AMPs. The size of Spool 2 is estimated with no confidence to
be 12,939,628 rows (336,430,328 bytes). The estimated time for
this step is 4.00 seconds.
7) We do an all-AMPs STAT FUNCTION step from Spool 2 by way of an
all-rows scan into Spool 10, which is redistributed by hash code
to all AMPs. The result rows are put into Spool 1 (group_amps),
which is built locally on the AMPs. This step is used to retrieve
the TOP 100 rows. Load distribution optimization is used.
If this step retrieves less than 100 rows, then execute step 8.
The size is estimated with no confidence to be 100 rows (3,200
bytes).
8) We do an all-AMPs STAT FUNCTION step from Spool 2 (Last Use) by
way of an all-rows scan into Spool 10 (Last Use), which is
redistributed by hash code to all AMPs. The result rows are put
into Spool 1 (group_amps), which is built locally on the AMPs.
This step is used to retrieve the TOP 100 rows. The size is
estimated with no confidence to be 100 rows (3,200 bytes).
9) Finally, we send out an END TRANSACTION step to all AMPs involved
in processing the request.
-> The contents of Spool 1 are sent back to the user as the result of
statement 1.
паста плана объяснить и статистику по каждой базовой таблице – emaillenin
, что это объяснить план для всего запроса? – emaillenin
Добавлен план объяснения для всего запроса – Arvinth