Bonjour j'essaye d'optimiser la requete suivante
Mon explain me donne ceci (les tables ne contiennent pas encore beaucoup de donnees)Code:SELECT id_pres AS id, (SELECT nomrue FROM rue WHERE id_rue = idrue ) AS nomrue,LOWER(nom) AS nom, ((CASE WHEN numrue != '' THEN numrue ELSE '' END) || ' ' || (SELECT nomrue FROM rue WHERE id_rue = idrue )) AS rue , (SELECT nomoperation FROM operation WHERE id_operation = idop) AS nomoperation, ( CASE WHEN etat=2 THEN 'En cours' WHEN etat=3 THEN 'Réalisé' ELSE 'En attente' END ) AS etat, dateprestation, (SELECT nomville FROM ville WHERE id_ville = idville ) AS ville FROM prestation WHERE id_pres != 0
Je me rends bien compte que je lance deux fois la meme requeteCode:
1
2
3
4
5
6
7
8
9
10
11 "Seq Scan on prestation (cost=0.00..6968.50 rows=269 width=154)" " Filter: (id_pres <> 0)" " SubPlan" " -> Seq Scan on ville (cost=0.00..1.04 rows=1 width=32)" " Filter: (id_ville = $5)" " -> Index Scan using pk_operation on operation (cost=0.00..8.27 rows=1 width=32)" " Index Cond: (id_nontrait = $3)" " -> Index Scan using pk_rue on rue (cost=0.00..8.27 rows=1 width=21)" " Index Cond: (id_rue = $0)" " -> Index Scan using pk_rue on rue (cost=0.00..8.27 rows=1 width=21)" " Index Cond: (id_rue = $0)"
(vu que je recupere tout dans un datatable ca m'evitait de faire un traitement dans le code)Code:SELECT nomrue FROM rue WHERE id_rue = idrue
C'est un peu couillon de faire ca. Donc je voulais savoir si en sql c'etait possible de l'ameliorer?
Je suis bien sur preneur d'autre piste pour ameliorer ce genre de requete.
Merci