Ajout de tables normalisées ou vues matérialisées si vous disposez des droits appropriés
(1) Pourriez vous nous faire un EXPLAIN sur votre requête comme ceci ?
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
|
EXPLAIN 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)
SELECT b.id_metier_,
pm.id_regleme AS pm,
b.id_regleme AS pa,
INNER JOIN ftth_pf b ON b.id_metier_= z.id_metier_
LEFT JOIN
(
SELECT id_metier_, id_regleme
FROM ftth_pf pm
WHERE pm.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 ta.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_ |
(2) Normalisation des tables :
Pour les tables : ftth_pf, ftth_zone_eligibilite, ftth_immeuble, sireo_immeuble
Quelle est la structure de ces tables ?
Pourriez vous nous montrer un échantillon de vos données tel qu'elles se présentent dans la bd
L'essentiel de vos jointures sont appliquées sur des parties de colonnes (chaînes de caractères), voilà pourquoi vous faites des likes et des concaténations
Cela signifie que vos tables ne respectent pas les différentes formes de normalisation(1FN, 2FN, 3FN...)
N'allez pas plus loin si cette étape n'est pas franchie.
Une donnée doit être atomique, c'est la Première forme Normale 1
La 2FN, exige que la 1FN soit d'abord respectée
La 3FN exige que la 2FN soit d'abord respectée.
Considérez que vos tables actuelles sont des tables facilitant l'import
Créez quelques tables supplémentaires correctement normalisées
Écrivez vos tables de manière lisibles
L'autre alternative serait de passer par des Vues Matérialisées
Exemple :
id_metier_ :
(69027/BG4/PMZ/24211'), cette colonne qui a une forme parfaitement structurée n'est pas atomique, vue qu'elle est la composition de quatre colonnes, elle viole la 1FN
Elle semble être votre clé primaire dans les tables suivantes : ftth_pf, ftth_zone_eligibilite, ftth_immeuble, test_appuis, apcom_poteaux
Décomposez la en plusieurs colonnes
Suggestion :
Importer vos données dans un schema séparé exemple import, archives
Créer toutes ou quelques tables normalisées dans un autre schema : public ou autre, avec des cléfs primaires numériques
Faites un script qui importe les données vers archive, puis formate et remplit ces tables normalisées :
Code:
INSERT INTO poteaux (poteau_id, ...) SELECT id, papa, maman FROM archives.ftth_pf.... WHERE ....
(3) Optimisation de vos requêtes
Posez des index sur les colonnes concernée par les jointures, tri
Vos jointures doivent être majoritairement appliquées sur des clés primaires numériques
COMMAND WITH : Utilisez les CTE pour rendre vos requêtes concises, voir mon exemple dans votre post précédent