在数据库中如果选用单表树结构的存储形式,那么只能分级查询节点数据是否有下级节点数据吗。那会使用很多次查询SQL语句,能否有更好的数据结构或者读取方式来解决这种数据库性能瓶颈。哪为大侠给点意见。。

解决方案 »

  1.   

    没什么特别好的办法,oracle 中有
    SELECT ....
          FROM ...
          START WITH fld='100'
          CONNECT BY PRIOR fld = parentFld但mySQL中仅靠一句SQL不行[align=center]====  ====
    [/align]
      

  2.   

    如果你的 树结构 的深度固定,可以考虑 多个 left / inner join来减少执行SQL的次数,但效率未必比你现在的逐个执行好[align=center]====  ====
    [/align]
      

  3.   

    如果树的深度无法预测,则我一般的做法和你一样,使用递归遍历来产生节点树。毕竟这些这些小SQL的代价并不大[align=center]====  ====
    [/align]
      

  4.   

    看一下,很好的例子http://dev.mysql.com/tech-resources/articles/hierarchical-data.html
      

  5.   

    谢谢。。其实本人考虑到使用树时,发现树的存储在一个二维表中是比较方便,而且通过,ROOT和CHILD就能完全分离,但是唯一的不足就是对资源的消耗,尤其是在深度没有确定的同时,如果没有解决好查询SQL优化,那效率更慢。因为深度的增加和消耗是按H的次方增长的。唉。这个问题现在还在想用更好的方法来处理。毕竟树的数据结构是比较常用。谢谢两位了。
      

  6.   

    谢谢yueliangdao0608提供的文献
    在看了刚才的那篇文章,发现文章中所提到的数据结构和我现在用的 结构是类似的,可以分节点和深度来标识,我自己将节点和深度整合在了一个表里面,通过深度标识出每级的节点,但是这里出现了一个问题是如何标识节点级数问题,我选择的是深度和ROOT节点对映,从而不用左右级联查询,用一般的SQL语句就能更方便的查询,现在只要做SQL语句优化,把查询结果数量级案大到小过滤的写入WHERE就可以了。
    非常感谢