Mysql
沒有 CTE 的分層查詢
我是 MySQL 新手。
GetFamilyTree(id)
Rolando 在 Find最高級別的分層欄位中建議的功能:有與沒有 CTE問題很棒,但是當 id 大於 999 時,它會掛起。是否有適用於較大 ID 的解決方案?
你可以做幾件事
事情#1
將所有擴展
VARCHAR(1024)
到VARCHAR(10240)
所有儲存過程。這將容納更長的家譜列表。這很重要,因為queue_children
如果你有一個不平衡的樹結構,它會變得越來越長。也有可能當 queue_children 的長度為 1024 並且沒有正確分隔時,它可能會進入一些無限循環,試圖正確終止並且永遠不會達到LENGTH(queue_children)
0 的條件。事情#2
GROUP_CONCAT()的最大長度受 group_concat_max_len 限制(預設為 1024)。嘗試將group_concat_max_len擴展為大得離譜的值(5000000000)。
事情#3
增加你的thread_stack,也許是 512K 或 1M。這對於具有遞歸操作的儲存過程來說是必需的,或者在這種情況下,需要更長的局部變數來騰出空間。
當我將部分更改
"FORMAT(queue,0)"
為simple 時"queue"
,GetFamilyTree 工作了IDs
超過 999。這是因為FORMAT(9999,0) = "9,999"
至少在我的系統中。我還在下面添加了一個唯一索引
id
和一個非唯一索引parent_id
,該程式碼在具有 230k 行的數據集上執行良好。我還將 VARCHAR(1024) 更改為 TEXT。