2016-02-11 2 views
0

Я пытаюсь сравнить таблицу 11 столбцов с 11 таблицей 13 столбцов и изменить 12-й столбец (индикатор) в таблице Б на соответствие или совпадение полей.Как сравнить 10 полей между двумя таблицами

SET SQL_SAFE_UPDATES=0; 
UPDATE `DDL_STAGING`.`MTDT_STG` S 
INNER JOIN `REFERENCE`.`REF_DATA_MODELS` D 
    ON S.`MDL_LAYER` = D.`MDL_LAYER` 
    AND S.`SBJT` = D.`SBJT` 
    AND S.`SCHEMA_NM` = D.`SCHEMA_NM` 
    AND S.`TBL_NM` = D.`TBL_NM` 
    AND S.`TBL_TYPE` = D.`TBL_TYPE` 
    AND S.`CLMN_NM` = D.`CLMN_NM` 
    AND S.`CLMN_DTYP` = D.`CLMN_DTYP` 
    AND S.`NULL_IND` = D.`NULL_IND` 
    AND S.`PK_IND` = D.`PK_IND` 
    AND S.`DFLT_VAL` = D.`DFLT_VAL` 
    AND S.`FK_TBL_ID` = D.`FK_TBL_ID` 
    AND S.`FK_CLMN_ID` = D.`FK_CLMN_ID` 
    AND S.`CLMN_ORD`= D.`CLMN_ORD` 
SET S.ACTN_IND = 'U'; 
SET SQL_SAFE_UPDATES=1; 

Естественно, это берет навсегда и запирает верстак дважды. Я попытался ввести хэш-проверки, так что я могу сравнить 1 колонка:

MD5(M.MDL_LAYER_ID |'~'| PKG.LOGL_PKG_NM | '~' | PC.PHYS_TBL_SCHEMA | '~' | PC.PHYS_TBL_NM | '~' | 
     PC.PHYS_TBL_TYPE |'~'| PC.PHYS_CLMN_NM |'~'| PC.PHYS_CLMN_DTYP | '~' | PC.PHYS_CLMN_NULL | '~' | 
     CASE WHEN PK.PHYS_CLMN_ID IS NOT NULL THEN 'Y' ELSE NULL END | '~' | PC.PHYS_CLMN_DFLT_VAL | '~' | 
     F.Ttbl | '~' | F.Tcol) AS HASH_VAL 

Но при заполнении столбцов, но некоторые столбцы равны нулю, в результате которых в много нулевых записей в столбце HASH_VAL. Я не могу сравнивать.

Так что я попытался ввода:

MD5(M.MDL_LAYER_ID |'~'| ifnull(PKG.LOGL_PKG_NM,'') | '~' | ifnull(PC.PHYS_TBL_SCHEMA,'') | '~' | ifnull(PC.PHYS_TBL_NM,'') | '~' | 
    ifnull(PC.PHYS_TBL_TYPE,'') |'~'| ifnull(PC.PHYS_CLMN_NM,'') |'~'| ifnull(PC.PHYS_CLMN_DTYP,'') | '~' | ifnull(PC.PHYS_CLMN_NULL,'') | '~' | 
    CASE WHEN PK.PHYS_CLMN_ID IS NOT NULL THEN 'Y' ELSE '' END | '~' | ifnull(PC.PHYS_CLMN_DFLT_VAL,'') | '~' | 
    ifnull(F.Ttbl,'') | '~' | ifnull(F.Tcol,'')) AS HASH_VAL 

Но это привело к ОДНОГО HASH значение для всех recors.

Что я могу сделать здесь? помните, что две таблицы соответствуют только 11 из 13 столбцов. Спасибо.

+0

Какие индексы у вас есть на этих таблицах? Сколько строк в таблицах? и т. д. – Uueerdo

+0

Я думал не по порядку. Я включил индекс после загрузки. Я изменил его, чтобы добавить индекс после создания DDL. Поместите индекс в качестве ответа, чтобы я мог проверить его. благодаря – arcee123

ответ

1

Пока JOINWHERE) условия не включают в себя OR или выполнять функции (такие как DATE, LEFT, TRIM, и т.д. ...), надлежащим образом построенные индексы могут обеспечить резкое увеличение производительности.

Под «надлежащим образом построенным» я имею в виду индексы, которые имеют полезные поля (ы) сначала в полях, которые они включают; если вы присоединяетесь/фильтруете только «кто» и ваш индекс включен «когда и кто» (в этом порядке), это не поможет вам.

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