2008-11-29 79 views
2

這是我的場景:MySQL存儲過程與多個選擇

我有一個表(我們稱它們爲)節點。每個主鍵都是「node_id」。

我有一個表,維持節點的層次結構,只有兩列:parent_node_id和child_node_id。

由於節點可以具有N:N關係,因此層次結構維護在單獨的表中。也就是說,一個節點可以有多個孩子和多個父母。

如果我開始一個節點,並希望得到其所有祖先(即一切越往上層次),我既可以做一些選擇,或做這一切在一個存儲過程。

任何具有此問題實際經驗的人都知道哪一個可能具有最佳性能?我在網上閱讀過推薦兩種方式的東西。

回答

5

「哪一個可能有最好的表現?」:沒人能知道!你可以做的唯一的事情就是同時嘗試和MEASURE。對於所有與性能相關的問題,主要答案都是可悲的,除非在算法之間明顯存在O(n)差異。順便說一下,「多個父母」並不構成一個層次結構(否則我會建議閱讀Joe Celko的一些書),但是DAG(直接無環圖)更難以馴服...

1

如果性能是你的關心,那麼該架構設計不會因爲其他人可以爲你工作爲好。

有關更多信息,請參閱More Trees & Hierarchies in SQL

+0

這不會在N:N的情況下工作。 – ysth 2008-11-30 21:26:30

+0

你說得對,該解決方案不適用於N:N。 – RedFilter 2008-12-01 01:27:54

0

我覺得一般的語句可能會導致成問題,因爲它依賴於指數的使用你如何你的查詢分別存儲過程作。 爲了做出有用的聲明,有必要比較你的選擇和存儲過程的SQL。