2008-11-29 8 views
2

Voici mon scénario:Procédure stockée MySQL vs sélections multiples

J'ai une table de nœuds (appelons-les). La clé primaire sur chacun d'eux est simplement "node_id".

J'ai une table qui maintient une hiérarchie de nœuds, avec seulement deux colonnes: parent_node_id et child_node_id.

La hiérarchie est conservée dans une table distincte car les nœuds peuvent avoir une relation N: N. C'est-à-dire qu'un nœud peut avoir plusieurs enfants et plusieurs parents.

Si je commence avec un nœud et que je veux récupérer tous ses ancêtres (c'est-à-dire tout ce qui se trouve plus haut dans la hiérarchie), je peux faire plusieurs sélections ou tout faire dans une procédure stockée.

Quelqu'un ayant une expérience pratique de cette question sait lequel est susceptible d'avoir la meilleure performance? J'ai lu des choses en ligne qui recommandent les deux façons.

Répondre

5

"qui est susceptible d'avoir la meilleure performance?": Personne ne peut savoir! La seule chose que vous pouvez faire est d'essayer les deux et MEASURE. C'est malheureusement assez la réponse principale à toutes les questions liées aux performances ... sauf dans les cas où vous avez clairement une différence O (n) entre les algorithmes. Et, en passant, "parents multiples" ne fait pas de hiérarchie (sinon je recommanderais de lire quelques livres de Joe Celko) mais un DAG (Direct Acyclic Graph) une bête beaucoup plus difficile à apprivoiser ...

+0

Je suis corrigé. Pouvez-vous poster des liens vers des références sur le DAG? –

+0

"SQL Design Patterns" de Vadim Tropashko est un livre qui parle de l'implémentation de graphes en SQL. Je préviens que ce livre n'est pas destiné au débutant. –

1

Si la performance vous concerne, alors cette conception de schéma ne fonctionnera pas aussi bien pour vous que d'autres. Pour plus d'informations, voir More Trees & Hierarchies in SQL pour plus d'informations.

+0

Cela ne va pas fonctionner dans une situation N: N. – ysth

+0

Vous avez raison, cette solution n'est pas conçue pour N: N. – RedFilter

0

Je pense que des déclarations générales pourraient conduire à un problème, car cela dépend de la façon dont vous faites vos requêtes ou la procédure stockée faire de l'utilisation des indices. Pour faire une déclaration utile, il serait nécessaire de comparer le SQL de vos sélections et la procédure stockée.

Questions connexes