Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    [MySQL] Ottimizzare Pivot + SubSelect

    Raga urge aiutino,
    Ho 4 tabelle

    1- tabelle delle spedizioni, pesi e volumi ( 1.200.000 records ) "tab:GAPP_SPED"
    2- angrafica responsabili di filiali ( capoarea, capifliali ) "tab: user"
    3- anagrafica filiali "tab: DEPOTS"
    4- visite clienti "tab: GAPP_VISITE"

    Ho impostato una pivot con subselect per recuperare tutte le filiali afferenti ai vari capiarea
    (ogni capo area ha più filiali )

    Funziona tutto, il problema che ci mette 33 secondi
    senza subselect impostando manualmente i codici filiale ci mette 1.5 secondi cmq troppo

    cosa posso fare ?



    codice:
    SELECT
    tb1.SETTIMANA AS wk,
    tb1.COD_FILIALE_OP AS FIL,
    SUM(IF(tb1.ANNO=2009, tb1.NUM_SPEDIZIONI, 0)) AS S_09,
    SUM(IF(tb1.ANNO=2010, tb1.NUM_SPEDIZIONI, 0)) AS S_10,
    SUM(IF(tb1.ANNO=2009, tb1.PESO_RILEVATO, 0)) AS P_09,
    SUM(IF(tb1.ANNO=2010, tb1.PESO_RILEVATO, 0)) AS P_10,
    SUM(IF(tb1.ANNO=2009, tb1.VOLUME_RILEVATO, 0)) AS V_09,
    SUM(IF(tb1.ANNO=2010, tb1.VOLUME_RILEVATO, 0)) AS V_10
    FROM GAPP_SPED AS tb1
    JOIN GAPP_VISITE tb2
    ON tb1.COD_CLIENTE=tb2.codice_cliente
    WHERE tb1.COD_FILIALE_OP IN (SELECT
    COD_FILIALE_OPE AS FIL
    FROM DEPOTS AS tb1
    JOIN user AS tb2 
    ON tb1.COD_AREA_OPE = tb2.SubRegion
    WHERE tb2.User='0001')
    AND tb1.ANNO BETWEEN 2009 AND 2010
    AND tb1.SETTIMANA BETWEEN 1 AND WEEK(NOW())
    GROUP BY wk
    ORDER BY wk

    EXPLAIN
    codice:
    id  select_type  table  type  possible_keys  key  key_len  ref  rows  Extra  
    1 SIMPLE tb1 range COD_CLIENTE,COD_FILIALE_OP COD_FILIALE_OP 8 NULL 52832 Using where; Using temporary; Using filesort 
    1 SIMPLE tb2 ref codice_cliente codice_cliente 11 reportdwh.tb1.COD_CLIENTE 1 Using index

  2. #2
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Quella clausola IN è devastante per la tua query.

    Aiutarti senza conoscere l'esatta struttura delle tabelle, quali indici hai impostato e un minimo di record fittizi per fare delle prove è impossibile, almeno per me.

  3. #3
    Grazie 1000 nicola75ss,
    modifico qualche nome campo e ti creo il dump con le tabelle interessate.

    Per rispondere subito alle tue domande gli indici e le chiavi primarie presumo siano corretti come indicato nel suggerimento EXPLAIN

    Per quanto riguarda la clausola, di primo acchito tu cosa avresti utilizzato ?



    .

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.