【问题标题】:Get hierarchical tree from database with minimum number of queries用最少的查询从数据库中获取层次树
【发布时间】:2014-08-27 10:01:41
【问题描述】:

现在我有以下表架构:

Node_Id (INT)| NodeName (nvarchar(40)) | ParentNode(int, FK)

我想从该结构中检索分层树:结构类似于此结构:{NodeId, NodeName, IEnumerable<Node> Children, bool hasChildren}

我看到这个问题的两个解决方案:第一个是树遍历。我的意思是加载根节点(其中 parent=null),然后为每个节点加载它的子节点并递归地为这些节点执行此操作。但是每个子负载都会导致对 DB 的额外查询,这会影响性能。

我看到的另一个选项是从数据库加载平面结构(与表模式相同),然后从中构建层次结构。这会对应用服务器造成性能影响。

我想知道是否有其他解决方案?

【问题讨论】:

    标签: c# sql tree


    【解决方案1】:

    如果您不需要一次显示所有子树,您可以立即根据指定的父节点加载,然后在用户展开子树时按需加载。这将减轻应用程序和数据库服务器上的负载。

    【讨论】:

    • 是的,我知道延迟加载,这是一个选项。但是,如果可能的话,我想避免它并立即加载树 - 它有近 15000 个节点 - 还不够大。
    【解决方案2】:

    除了您已经提到的解决方案之外,您还可以在 oracle sql 中使用 connect by / start with。

    查看此链接了解更多信息:http://docs.oracle.com/cd/B19306_01/server.102/b14200/queries003.htm

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-05-06
      • 2021-12-13
      • 2022-06-13
      • 1970-01-01
      • 2018-04-01
      • 1970-01-01
      • 2016-01-06
      • 1970-01-01
      相关资源
      最近更新 更多