2014-02-07 5 views
0

Я пытаюсь оптимизировать следующий запрос 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. 
+0

паста плана объяснить и статистику по каждой базовой таблице – emaillenin

+0

, что это объяснить план для всего запроса? – emaillenin

+0

Добавлен план объяснения для всего запроса – Arvinth

ответ

0

Там нет ORDER BY в запросе, так что вы просто хотите 100 случайных строк?

В Teradata TOP сделан после полный результирующий набор был создан. Вы должны переместить TOP в производной таблицу, как:

select I.item_sku_nbr,L.loc_nbr,MIS.MVNDR_PRTY_ID from 
QA_US_MASTER_VIEWS.item I, 
qa4_US_MASTER_VIEWS.location L, 
(SELECT TOP 100 * FROM 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' 
+0

Случайные строки в порядке. Но в конце этого появляется синтаксическая ошибка - (SELECT TOP 100 * FROM qa4_US_MASTER_VIEWS.item_str IST), ожидаемый идентификатор betwenn) и – Arvinth

+0

К сожалению, я поставил скобу в неправильном месте, имя псевдонима отсутствует. Отредактировано мой запрос – dnoeth

+0

@dnoeth Не использовал бы 'sample 100' быстрее, чем' top 100'? –

Смежные вопросы