2008-11-29 129 views
2

这是我的场景:MySQL存储过程与多个选择

我有一个表(我们称它们为)节点。每个主键都是“node_id”。

我有一个表,维持节点的层次结构,只有两列:parent_node_id和child_node_id。

由于节点可以具有N:N关系,因此层次结构维护在单独的表中。也就是说,一个节点可以有多个孩子和多个父母。

如果我开始一个节点,并希望得到其所有祖先(即一切越往上层次),我既可以做一些选择,或做这一切在一个存储过程。

任何具有此问题实际经验的人都知道哪一个可能具有最佳性能?我在网上阅读过推荐两种方式的东西。

回答

5

“哪一个可能有最好的表现?”:没人能知道!你可以做的唯一的事情就是同时尝试和MEASURE。对于所有与性能相关的问题,主要答案都是可悲的,除非在算法之间明显存在O(n)差异。顺便说一下,“多个父母”并不构成一个层次结构(否则我会建议阅读Joe Celko的一些书),但是DAG(直接无环图)更难以驯服...

1

如果性能是你的关心,那么该架构设计不会因为其他人可以为你工作为好。

有关更多信息,请参阅More Trees & Hierarchies in SQL

+0

这不会在N:N的情况下工作。 – ysth 2008-11-30 21:26:30

+0

你说得对,该解决方案不适用于N:N。 – RedFilter 2008-12-01 01:27:54

0

我觉得一般的语句可能会导致成问题,因为它依赖于指数的使用你如何你的查询分别存储过程作。 为了做出有用的声明,有必要比较你的选择和存储过程的SQL。