2013-12-12 3 views
-1

mysql에서이 쿼리 시리즈의 성능을 향상시키는 데 어려움이 있습니다. 관련된 두 테이블 : TAB_PRODOTTI 및 TAB_PRODOTTI_PROVISSORIA는 정확히 동일한 열을 가지고 정렬됩니다.쿼리 개선 Mysql

UPDATE wfpdb.TAB_PRODOTTI AA 
SET AA.PRODOTTO_DESC = (SELECT PRODOTTO_DESC 
          FROM wfpdb.TAB_PRODOTTI_PROVVISORIA BB 
          WHERE AA.PRODOTTO_CD = BB.PRODOTTO_CD 
            AND AA.MODELLO_CD = BB.MODELLO_CD); 

UPDATE wfpdb.TAB_PRODOTTI AA 
SET AA.PRODOTTO_SCHEDA = (SELECT PRODOTTO_SCHEDA 
          FROM wfpdb.TAB_PRODOTTI_PROVVISORIA BB 
          WHERE AA.PRODOTTO_CD = BB.PRODOTTO_CD 
            AND AA.MODELLO_CD = BB.MODELLO_CD); 

UPDATE wfpdb.TAB_PRODOTTI AA 
SET AA.ATTIVITA_SCHEDA = (SELECT ATTIVITA_SCHEDA 
          FROM wfpdb.TAB_PRODOTTI_PROVVISORIA BB 
          WHERE AA.PRODOTTO_CD = BB.PRODOTTO_CD 
            AND AA.MODELLO_CD = BB.MODELLO_CD); 

UPDATE wfpdb.TAB_PRODOTTI AA 
SET AA.TITOLO_PRODOTTO_MANUALE = (SELECT TITOLO_PRODOTTO_MANUALE 
            FROM wfpdb.TAB_PRODOTTI_PROVVISORIA BB 
            WHERE AA.PRODOTTO_CD = BB.PRODOTTO_CD 
              AND AA.MODELLO_CD = BB.MODELLO_CD); 

UPDATE wfpdb.TAB_PRODOTTI AA 
SET AA.CANALE = (SELECT CANALE 
        FROM wfpdb.TAB_PRODOTTI_PROVVISORIA BB 
        WHERE AA.PRODOTTO_CD = BB.PRODOTTO_CD 
          AND AA.MODELLO_CD = BB.MODELLO_CD); 

UPDATE wfpdb.TAB_PRODOTTI AA 
SET AA.PERCORSO = (SELECT PERCORSO 
         FROM wfpdb.TAB_PRODOTTI_PROVVISORIA BB 
         WHERE AA.PRODOTTO_CD = BB.PRODOTTO_CD 
          AND AA.MODELLO_CD = BB.MODELLO_CD); 

UPDATE wfpdb.TAB_PRODOTTI AA 
SET AA.MODALITA_RIVELAZIONE = (SELECT MODALITA_RIVELAZIONE 
            FROM wfpdb.TAB_PRODOTTI_PROVVISORIA BB 
            WHERE AA.PRODOTTO_CD = BB.PRODOTTO_CD 
             AND AA.MODELLO_CD = BB.MODELLO_CD); 

UPDATE wfpdb.TAB_PRODOTTI AA 
SET AA.COEFF_OMOG_DEFINITO_1 = (SELECT COEFF_OMOG_DEFINITO_1 
            FROM wfpdb.TAB_PRODOTTI_PROVVISORIA BB 
            WHERE AA.PRODOTTO_CD = BB.PRODOTTO_CD 
              AND AA.MODELLO_CD = BB.MODELLO_CD); 

UPDATE wfpdb.TAB_PRODOTTI AA 
SET AA.COEFF_OMOG_DEFINITO_2 = (SELECT COEFF_OMOG_DEFINITO_2 
            FROM wfpdb.TAB_PRODOTTI_PROVVISORIA BB 
            WHERE AA.PRODOTTO_CD = BB.PRODOTTO_CD 
              AND AA.MODELLO_CD = BB.MODELLO_CD); 

UPDATE wfpdb.TAB_PRODOTTI AA 
SET AA.COEFF_OMOG_DEFINITO_3 = (SELECT COEFF_OMOG_DEFINITO_3 
            FROM wfpdb.TAB_PRODOTTI_PROVVISORIA BB 
            WHERE AA.PRODOTTO_CD = BB.PRODOTTO_CD 
              AND AA.MODELLO_CD = BB.MODELLO_CD); 

UPDATE wfpdb.TAB_PRODOTTI AA 
SET AA.ALLEGATO_1 = (SELECT ALLEGATO_1 
         FROM wfpdb.TAB_PRODOTTI_PROVVISORIA BB 
         WHERE AA.PRODOTTO_CD = BB.PRODOTTO_CD 
           AND AA.MODELLO_CD = BB.MODELLO_CD); 

UPDATE wfpdb.TAB_PRODOTTI AA 
SET AA.ALLEGATO_2 = (SELECT ALLEGATO_2 
         FROM wfpdb.TAB_PRODOTTI_PROVVISORIA BB 
         WHERE AA.PRODOTTO_CD = BB.PRODOTTO_CD 
           AND AA.MODELLO_CD = BB.MODELLO_CD); 

UPDATE wfpdb.TAB_PRODOTTI AA 
SET AA.ALLEGATO_1_DESC = (SELECT ALLEGATO_1_DESC 
          FROM wfpdb.TAB_PRODOTTI_PROVVISORIA BB 
          WHERE AA.PRODOTTO_CD = BB.PRODOTTO_CD 
            AND AA.MODELLO_CD = BB.MODELLO_CD); 

UPDATE wfpdb.TAB_PRODOTTI AA 
SET AA.ALLEGATO_2_DESC = (SELECT ALLEGATO_2_DESC 
          FROM wfpdb.TAB_PRODOTTI_PROVVISORIA BB 
          WHERE AA.PRODOTTO_CD = BB.PRODOTTO_CD 
            AND AA.MODELLO_CD = BB.MODELLO_CD); 

UPDATE wfpdb.TAB_PRODOTTI AA 
SET AA.ALLEGATO_1_DESC = (SELECT ALLEGATO_1_DESC 
          FROM wfpdb.TAB_PRODOTTI_PROVVISORIA BB 
          WHERE AA.PRODOTTO_CD = BB.PRODOTTO_CD 
            AND AA.MODELLO_CD = BB.MODELLO_CD); 

UPDATE wfpdb.TAB_PRODOTTI AA 
SET AA.PRODOTTO_PIANO_PROD = (SELECT PRODOTTO_PIANO_PROD 
           FROM wfpdb.TAB_PRODOTTI_PROVVISORIA BB 
           WHERE AA.PRODOTTO_CD = BB.PRODOTTO_CD 
             AND AA.MODELLO_CD = BB.MODELLO_CD); 

UPDATE wfpdb.TAB_PRODOTTI AA 
SET AA.PRODOTTO_SUSSIDIARIETA = (SELECT PRODOTTO_SUSSIDIARIETA 
            FROM wfpdb.TAB_PRODOTTI_PROVVISORIA BB 
            WHERE AA.PRODOTTO_CD = BB.PRODOTTO_CD 
              AND AA.MODELLO_CD = BB.MODELLO_CD); 

UPDATE wfpdb.TAB_PRODOTTI AA 
SET AA.NOTE = (SELECT NOTE 
        FROM wfpdb.TAB_PRODOTTI_PROVVISORIA BB 
        WHERE AA.PRODOTTO_CD = BB.PRODOTTO_CD 
         AND AA.MODELLO_CD = BB.MODELLO_CD); 

UPDATE wfpdb.TAB_PRODOTTI AA 
SET AA.MODELLO_DESC = (SELECT MODELLO_DESC 
          FROM wfpdb.TAB_PRODOTTI_PROVVISORIA BB 
          WHERE AA.PRODOTTO_CD = BB.PRODOTTO_CD 
           AND AA.MODELLO_CD = BB.MODELLO_CD); 

UPDATE wfpdb.TAB_PRODOTTI AA 
SET AA.AGGREGATO_DESC = (SELECT AGGREGATO_DESC 
          FROM wfpdb.TAB_PRODOTTI_PROVVISORIA BB 
          WHERE AA.PRODOTTO_CD = BB.PRODOTTO_CD 
            AND AA.MODELLO_CD = BB.MODELLO_CD); 

UPDATE wfpdb.TAB_PRODOTTI AA 
SET AA.PROCESSO_DESC = (SELECT PROCESSO_DESC 
          FROM wfpdb.TAB_PRODOTTI_PROVVISORIA BB 
          WHERE AA.PRODOTTO_CD = BB.PRODOTTO_CD 
            AND AA.MODELLO_CD = BB.MODELLO_CD); 

UPDATE wfpdb.TAB_PRODOTTI AA 
SET AA.LINEA_SERVIZIO_DESC = (SELECT LINEA_SERVIZIO_DESC 
           FROM wfpdb.TAB_PRODOTTI_PROVVISORIA BB 
           WHERE AA.PRODOTTO_CD = BB.PRODOTTO_CD 
             AND AA.MODELLO_CD = BB.MODELLO_CD); 

UPDATE wfpdb.TAB_PRODOTTI AA 
SET AA.DT_FINE = (SELECT DT_FINE 
        FROM wfpdb.TAB_PRODOTTI_PROVVISORIA BB 
        WHERE AA.PRODOTTO_CD = BB.PRODOTTO_CD 
          AND AA.MODELLO_CD = BB.MODELLO_CD); 

모든 의견을 환영합니다. 미리 감사드립니다.

+1

모든 하위 쿼리가 동일한'where' claus 이자형. 아마 이것은 당신을 시작할 것입니다. http://stackoverflow.com/questions/5985264/mysql-update-multiple-columns-with-a-select-returning-multiple-rows –

답변

1

이러한 검색어에 동일한 가입 항목이있는 경우 하나의 검색어에서 여러 항목을 업데이트 할 수 있습니다. 예 :

UPDATE

TAB_PRODOTTI의 AA, BB TAB_PRODOTTI_PROVVISORIA

SET AA.column1 = BB.column1, AA.column2 = BB.column2,

AA.column3 = BB.column3

어디에서 AA.PRODOTTO_CD = BB.PRODOTTO_CD 및 AA.MODELLO_CD = BB.MODELLO_CD

+0

감사하지만이 불행히도 실행 시간을 도움이되지 않습니다 – user3096300

+0

모두의 합계를 비교하십시오 단일 질의 실행 시간으로 실행 시간을 쿼리하고 테이블/히팅 서버 등을 연결하는 여러 시간을 절약 할 수 있습니다. – kashan

+0

대단히 감사합니다. 35 초에서 4 초로 바뀌 었습니다. – user3096300