x
SELECT DISTINCT af.ID, af.nom_flux, st.chemin_stockage, af.hash_flux
FROM signature sig
INNER JOIN stockage st ON st.id_flux = sig.id_flux AND st.date_statut_stockage >= sysdate - 100
INNER JOIN allotissement_flux af ON af.ID = sig.id_flux
WHERE sig.date_statut_signature >= sysdate - 100
AND sig.statut_signature = 'A_SIGNER'
AND st.statut_stockage = 'OUI'
AND sig.nb_appel_service_signature < 4 ;
The query above returns me 5222 rows, and it runs locally in 0.63 seconds. I’m wondering if it is as fast as it can be or if I can tweak it further somehow, as this dataset will grow fast overtime.
Things that I’ve tried without change in speed:
1 – Change the join order, joining from the smallest to the biggest table.
2 – Adding an index to af.ID.
Advertisement
Answer
Move the junction table out of the main query:
SELECT af.ID, af.nom_flux, st.chemin_stockage, af.hash_flux
FROM JOIN stockage st
INNER JOIN allotissement_flux af
ON EXISTS ( SELECT *
FROM signature sig
WHERE st.id_flux = sig.id_flux
AND af.ID = sig.id_flux
AND sig.statut_signature = 'A_SIGNER'
AND sig.nb_appel_service_signature < 4
AND sig.date_statut_signature >= sysdate - 100
)
WHERE st.statut_stockage = 'OUI'
AND st.date_statut_stockage >= sysdate - 100
;