Faire un update avec sum et qui implique plusieurs tables - SQL/NoSQL - Programmation
Marsh Posté le 18-06-2015 à 17:38:00
Dans la requête il y a tout les ingrédients nécessaire pour plomber les performances.
Opération arithmétique dans une fonction d'agregation, group by, sous requête, jointure gauche, IN.
Si en plus il y a pas d'index, c'est le pompom assuré !
Je suis pas étonné.
- Créé des tables temporaire pour séparer tes opérations.
- Regarde les index de tes tables.
- Evite le IN et fait une jointure avec la table temporaire qui va te retourner que le ETC_KEYID déjà calculé en amont.
Marsh Posté le 01-04-2015 à 12:00:10
Bonjour,
Voici mon problème: je dois clôturer tous les chantiers de la société 377487086 dont la "Date Totalement facturé" date de plus de un an sauf ceux qui comportent des dépenses alors que la facturation est nulle et qu'ils sont indiqués comme facturables.
voici ma requête:
UPDATE CHANTIERS set ETC_KEYID = 99
where ETC_KEYID in (select c.ETC_KEYID from CHANTIERS c inner join ETATSCHANTIERS et on c.ETC_KEYID = et.ETC_KEYID
left join (select co.CHA_KEYID, SUM(SCH_QUANTITE * SCH_PRIXACHATHT * CPC_COEFFG) TOTALPRIXREVIENT
from COMPOSITIONCHANTIER co inner join SAISIESCHANTIERS s on s.CPC_KEYID=co.CPC_KEYID
group by CHA_KEYID) CPCT on CPCT.CHA_KEYID=c.CHA_KEYID
left join (select FAC.CHA_KEYID, coalesce(SUM(FAC_MONTANTHT), 0) TOTALFACTURE
from FACTURESCHANTIERS FAC left join FACTURESCLIENTS FCL on FAC.FCL_KEYID = FCL.FCL_KEYID
group by FAC.CHA_KEYID) FACT on FACT.CHA_KEYID=c.CHA_KEYID
where c.SOC_KEYID = 377487086 and CHA_DATETOTALEMENTFACTURE < DATEADD(-1 year to CURRENT_DATE)
and TOTALPRIXREVIENT < 0 and TOTALFACTURE > 0 and CHA_FACTURABLE = 'O' )
Lorsque je lance l'update il s'exécute pendant beaucoup et là s'attend toujours....