这是我的情景:
我有一个(让我们称之为)节点的表。每个主键都只是“node_id”。
我有一个维护节点层次结构的表,只有两列:parent_node_id和child_node_id。
层次结构在单独的表中维护,因为节点可以具有N:N关系。也就是说,一个节点可以有多个子节点和多个父节点。
如果我从一个节点开始并希望得到它的所有祖先(即层次结构中的所有东西),我可以做几个选择,或者在一个存储过程中完成所有操作。
任何对这个问题有实际经验的人都知道哪一个可能有最好的表现?我在线阅读了两种推荐方式。
答案 0 :(得分:5)
“哪一个可能有最好的表现?”:没有人能够知道!你唯一能做的就是尝试和MEASURE。令人遗憾的是,所有与性能相关的问题的主要答案......除非您在算法之间明显存在O(n)差异。
顺便说一句,“多个父母”并不构成一个等级(否则我会建议阅读Joe Celko的一些书)但DAG(直接无环图)是一个更难以驯服的野兽...
答案 1 :(得分:1)
如果您关心性能,那么该架构设计对您来说不会像其他人那样有效。
有关详细信息,请参阅More Trees & Hierarchies in SQL。
答案 2 :(得分:0)
我认为一般性陈述可能导致问题,因为它取决于您的查询分别是存储过程如何使用索引。 要做一个有用的声明,有必要比较您的选择的SQL和存储过程。