There is a application with a very slow query (listed below), and I have to optimize to run faster. The truth is that I don't know where to start. Any help?
SELECT DISTINCT v.order_ANC,
v.order_ANC2,
f.codi_arxiu,
f.nom_arxiu,
f.codi_grup,
f.codi_fons_refe,
f.codi_fons,
f.nom_fons,
f.any_ini,
f.any_fi,
f.cronologia,
SUM (num_uni_imatges) AS num_uni_imatges,
SUM (unitats_text) AS unitats_text,
SUM (unitats_notext) AS unitats_notext
FROM ( SELECT f.codi_arxiu,
f.nom_arxiu,
f.codi_grup,
f.codi_fons_refe,
f.codi_fons,
f.nom_fons,
f.any_ini,
f.any_fi,
f.cronologia,
SUM (CASE WHEN u.num_imatges > 0 THEN 1 ELSE 0 END) AS num_uni_imatges,
COUNT (u.codi_unitat) AS unitats_text,
0 AS unitats_notext
FROM ianc_fons f
JOIN ianc_unicat u ON ( f.codi_arxiu = u.codi_arxiu AND f.codi_fons = u.codi_fons )
WHERE 1 = 1
AND u.anc_unicat_id IN
(SELECT DISTINCT u.anc_unicat_id
FROM ianc_unicat u
WHERE 1 = 1
AND u.codi_arxiu = '1'
AND u.codi_grup = 'ANC'
AND u.codi_fons = 1)
GROUP BY f.codi_arxiu,
f.nom_arxiu,
f.codi_grup,
f.codi_fons_refe,
f.codi_fons,
f.nom_fons,
f.any_ini,
f.any_fi,
f.cronologia
UNION
SELECT f.codi_arxiu,
f.nom_arxiu,
f.codi_grup,
f.codi_fons_refe,
f.codi_fons,
f.nom_fons,
f.any_ini,
f.any_fi,
f.cronologia,
SUM (CASE WHEN u.num_imatges > 0 THEN 1 ELSE 0 END) AS num_uni_imatges,
0 AS unitats_text,
COUNT (u.nt1_unitat) AS unitats_notext
FROM ianc_fons f
JOIN ianci_unicats u ON ( f.codi_arxiu = u.nt1_codi_arxiu
AND f.codi_fons = u.nt1_codi_fons )
WHERE 1 = 1
AND u.nt1_id IN
(SELECT DISTINCT u.nt1_id
FROM ianci_unicats u
WHERE 1 = 1
AND u.nt1_codi_arxiu = '1'
AND u.codi_grup = 'ANC'
AND u.nt1_codi_fons = 1)
GROUP BY f.codi_arxiu,
f.nom_arxiu,
f.codi_grup,
f.codi_fons_refe,
f.codi_fons,
f.nom_fons,
f.any_ini,
f.any_fi,
f.cronologia
) AS f
LEFT JOIN v_ianc_arxius_order v ON ( f.codi_arxiu=v.codi_arxiu )
GROUP BY v.order_ANC,v.order_ANC2,f.codi_arxiu, f.nom_arxiu, f.codi_grup, f.codi_fons_refe,
f.codi_fons, f.nom_fons, f.any_ini, f.any_fi, f.cronologia
ORDER BY v.order_ANC,v.order_ANC2,f.nom_arxiu, f.nom_fons