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方面的知識,案例一切以實際工做演變而來。

相關文章
相關標籤/搜索