Bonjour à tous,

Comme je l'ai dit lors de mes précédents postes je débute en sql et si j'ai bien compris un truc c'est que j'ai pas encore la logique du sql et donc mes requêtes sont loin d'être optimisées .

Donc là j'ai une requête qui prende pret de 20min à s'éxécutée et je voudrais avoir si d'après il y aurait des astuces pour l'optimiser ?

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
select ft.id_metier_, pm.id_regleme as pm,b.id_regleme as pa,ft.code_com,ft.utilisation,ft.etat,ft.calc_charg,ft.poi,ta.util,ta.com,c.ref_cable,ap.result_etu
from ftth_site_appui_ft ft
inner join ftth_zone_eligibilite z on st_intersects(z.geom,ft.geom)
inner join ftth_pf b on b.id_metier_=z.id_metier_
left join (select id_metier_, id_regleme
	from ftth_pf pm
	where type_pf ='PMZ' or pm.type_pf = 'PA') pm on pm.id_metier_ like concat('%',b.nom_nro,'/',b.type_pf_pe,'/',cast(b.num_ordre_ as bigint))
left join ftth_cable c on st_dwithin(ft.geom,c.geom,0.2)
left join test_appuis ta on nom_appui=ft.id_metier_ 
left join apcom_poteaux ap on ap.id_geofibre = ft.id_metier_
where c.ref_cable Is Null and z.id_metier_ like '%PA%'
order by ft.id_metier_
Pour décrire un peu ce que j'y fais :
Je récupère des points sur une carte (ft)
Je les joints a des zones géographiques (z) pour récupérer le point principale de la zone (z.id_metier_)
Je joins alors le point principal (z.id_metier_) trouvé avec la liste des points principaux (pm) pour y récupéré certaines infos
Je joins enfin des câbles avec mes points du départ pour trouver les points qui sont dans la zone mais pas sur ces câbles
Je joins enfin une autre table (ta) pour récupérer d'autres infos (ta.util,ta.com)
Je joins encore une autre table (ap) pour récupérer d'autres infos (ap.result_etu)

Voilà je sais pas si vous auriez besoin d'autres infos pour me donner quelques conseils ?