sql实际应用-递归查询

一、既然要谈到sql,数据库表是必须的node

 

二、数据结构sql

   

三、获取某个节点的全部子节点数据库

    传统的写法(sql2000) 很麻烦,暂且就不写了缓存

    来看看CTE的写法数据结构

   

CREATE PROC sp_getTreeById(@TreeId int)
AS
BEGIN
    
    WITH cteTree
        AS (SELECT *
              FROM TuziTree
              WHERE Id = @TreeId  --第一个查询做为递归的基点(锚点)
            UNION ALL
            SELECT TuziTree.*     --第二个查询做为递归成员, 下属成员的结果为空时,此递归结束。
              FROM
                   cteTree INNER JOIN TuziTree ON cteTree.Id = TuziTree.ParentId) 
        SELECT *
          FROM cteTree 
  
END

  测试一下啊  性能

 exec  sp_getTreeById  @TreeId=1001                          

结果测试

-----------------------------------------------spa

四、使用节点路径来作(每一个节点路径都保存自身的路径和全部父节点的路径=本身和全部父节点的关联)设计

   

五、既然有个路径3d

  那么查询其全部子节点 只须要 where nodePath like '/1001/%'了

  这样就会简单不少,加上索引。

总结:

  若是在性能的须要上,咱们能够采用按需加载,点击节点时候 才会加载其全部子节点。

  若是在变化不大的状况下,能够采用缓存 。这样的处理 能够知足不少业务需求。

  良好的表设计会给后期的开发以及需求变化 带来更多的便利。

  下次继续总结sql方面的知识,案例一切以实际工做演变而来。

相关文章
相关标签/搜索