我們有一個模型樹的數據庫。這些數據可能會變得相當龐大,也就是說可能有數百萬行。 (主鍵實際上是bigint
,所以我想我們可能會支持數十億行,儘管這可能永遠不會發生)。hierarchyid是否適合頻繁插入葉節點的大樹?
單個節點可以有非常大量的直接子元素,更可能是層次結構中的較高層級。我們對葉子的實際最大深度沒有特別的限制,即有多少個節點必須經過才能到達根部,但實際上這可能通常最多不會超過幾百個。通常情況下,它可能低於20.
此表中的插入非常頻繁,需要高性能。插入插入節點始終是葉節點,並始終在最後一個兄弟節點之後。節點永遠不會移動。刪除總是作爲整個子樹。查找子樹是在這張桌子上做的其他操作。它沒有相同的性能要求,但我們當然希望它儘可能快。
今天,這是用父/子模型建模的,這對於插入是有效的,但是對於找到子樹是很痛苦的。當表變大時,這變得非常緩慢,找到一個子樹可能需要幾分鐘時間。
所以我想轉換這可能使用SQL Server中的新的hierarchyid類型。但是我有麻煩找出這是否合適。正如我對它所做的那樣,對於我們在這種情況下執行的操作,這樣的樹會是一個好主意。 (如果我在這裏錯了,請糾正我)。
但它也表明hierarchyid的最大大小是892字節。但是,我無法找到任何關於這在實踐中意味着什麼的信息。 hierarchyid是如何編碼的?我是否會耗盡hierarchyids,如果是的話,何時?
其實892字節是相當多的,考慮到8字節用於代表表格中的主鍵。 ;)但是我真的在尋找一些有關hierarchyid類型的編碼的事實,以找出這些限制。如果我做的任何測試都沒有失敗,那並不能證明它不會因另一種(類似的)情況而失敗。引入hierarchyids的原因絕對是出於性能原因。但是,離開SQL不是目前的選擇。 – DeCaf