Question optimisation - PHP - Programmation
Marsh Posté le 17-02-2011 à 08:57:38
Pourquoi ne pas faire simplement une jointure SQL ?
Marsh Posté le 17-02-2011 à 11:40:21
parce que:
je veux récupérer 3 paramètres dans ma table rubriques
je peux avoir beaucoup de sous rubriques
exemple:
30 rubriques, chacun 20 sous rubriques
en utilisant ma méthode:
- 1 requete simple sur rubriques pour récup 30 résultats
- 1 requete simple sur sous rubriques pour récup 600 résultats
en faisant une jointure, j'ai toujours 600 résultats à trouver, mais je me dis que la requete sera bien plus gourmande, à chaque résultat j'aurai:
id_sous_rubrique / id_rubrique / nom_rubrique / date_creation_rubrique / createur_rubrique / nom_sous_rubrique / champs de sous rubriques
les champs en gras étant les champs récupéres grace à la jointure...
c'est justement ce que je me pose: dans un souci d'optimisation, quelle méthode choisir?
Marsh Posté le 17-02-2011 à 11:52:18
Une remarque en passant : la notion de rubrique/sous-rubrique est une arborescence. Il n'y a donc pas besoin de 2 tables pour ça. 2 modélisations possibles :
1) 1 table avec comme clé étrangère "ParentID" qui pointe en fait sur la même table, sur la rubrique parente. Avantage, c'est facile à gérer lors des insert/update, par contre, pour récupérer toute l'arbo ou une partie de la filiation, faut faire de la récursivité (donc plusieurs requêtes).
2) la représentation intervallaire : http://sqlpro.developpez.com/cours/arborescence/ et http://dev.mysql.com/tech-resource [...] -data.html
Avantage, 1 seule requête pour récupérer toute ou partie de l'arbo, inconvénient, lors d'un insert/update, faut recalculer les intervalles.
Marsh Posté le 17-02-2011 à 11:56:33
Tu peux filtrer les champs que tu veux récupérer, tu n'es pas obligé de faire un SELECT *.
Penses tu sérieusement que les mecs qui codent un SGBD sont tellement nuls qu'en recodant leur boulot en PHP tu feras de l'optimisation ?
N'essaie jamais d'optimiser tant que tu ne maitrises pas encore correctement les outils de base à ta disposition. Ce sera toujours contre productif. Et si un jour quelqu'un doit repasser derrière, il aura envie de se tirer une balle.
Marsh Posté le 17-02-2011 à 12:06:19
Et puis récupérer 30 ou 600 résultats, pour le SGBD, ça va pas faire une grosse différence au niveau perf (ça va se jouer à 0.01s) Tu ferais mieux de revoir ta modélisation d'arborescence car avec ta solution, t'es limité à un niveau de sous-rubrique alors qu'avec mes 2 solutions, non.
Marsh Posté le 17-02-2011 à 01:40:52
Bonjour,
je vous explique rapidement mon problème:
J'ai 2 tables: 1 table de "rubriques" et une table de "sous rubriques" contenant la clé de la rubrique parente..
dans ma page php, je dois afficher toutes les rubriques avec leurs sous rubriques. mais quelle est la meilleure procédure?
J'ai pensé à :
1 requete vers la table "rubriques"
1 requete vers la table "sous-rubriques"
1 boucle sur les résultats de "sous rubriques" en stockant les résultats dans un tableau style $rubrique[$result->rubrique_id]=$sous_rubrique
et apres affichage avec foreach
comme ca on a que 2 requetes SQL
en fait je voulais savoir si c'était la meilleure solution ou s'il y a une technique bien plus simple et optimisée..
Je vous remercie!