sql >> Databasteknik >  >> RDS >> Oracle

PHP Oracle-fråga välj uttalande inuti loop långsam

Om jag har läst din kod korrekt är det du är ute efter en enda MERGE-sats som du kan köra på databasen. Jag kan inte PHP, så jag kan inte ge dig hur det ska kallas, men jag kan ge dig SQL-satsen som ska köras:

MERGE INTO mep_tbl_output_details tgt
  USING (SELECT mtm.modelid,
                mtm.model_name,
                mtmc.configurationid,
                mtmc.date_code,
                mtmc.read_row_after,
                mtmc.create_from_format,
                mtmc.ip_address,
                mtmc.status,
                mtmc.ts_code
         FROM   mep_tbl_model mtm
                INNER JOIN mep_tbl_model_configuration mtmc ON mtm.modelid = mtmc.modelid_fk
         WHERE  mtm.active = 'Y'
         AND    mtm.location = 'PCBA') src
    ON (tgt.modelid_fk = src.modelid
        AND tgt.ts_code = src.ts_code
        AND tgt.configurationid_fk = src.configurationid
        AND tgt.runningdate = :log_date
        AND tgt.shift = 'Morning'
        AND tgt.quantity_status = 'OK')
WHEN NOT MATCHED THEN
  INSERT (tgt.modelid_fk, tgt.running_date, tgt.quantity_status, tgt.ts_code, tgt.shift, tgt.configuration_fk)
  VALUES (src.modelid, :log_date, 'OK', src.ts_code, 'Morning', src.configurationid);

Detta gör kopplingen du återuppfann med dina loopar, länkar tillbaka till tabellen du försöker infoga i och infogar bara en rad om den inte redan finns i tabellen.

Du skulle behöva skriva PHP-koden för att utföra detta, efter att ha skickat in log_date som en bindningsvariabel.

Genom att binda variabeln tillåter du databasen att hoppa över den hårda analysen (dvs. ta reda på det bästa sättet att köra frågan), vilket sparar tid.

Genom att inte hämta data och manuellt loopa runt innan du väljer mer data och räkna ut om du behöver infoga, hoppar du över en hel del kontextväxling och drar/skjuter data över nätverket. Låt databasen göra det tunga arbetet; det är vad den är designad för att göra!




  1. Datumformat i asp till excel-form

  2. Fel på DECLARE-variabeln i MySql-proceduren

  3. Summan av två frågor

  4. Hur säkerhetskopierar och återställer man en databas som en kopia på samma server?