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