一千萬個為什麽

搜索

MySQL中的分層數據與XML一樣快,可以檢索?

i've got a list of all countries -> states -> cities (-> subcities/villages etc) in a xml file and to retrieve for example a state's all cities it's really quick with xml (using xml parser).

我想知道,如果我把所有這些信息都放在mysql中,那麽就像使用XML一樣快速檢索一個州的所有城市?因為XML用於存儲分層數據,而像mysql這樣的關系數據庫則不是。

該列表包含50萬個實體。所以我想知道它是否像使用以下任何一種方式一樣快:

鄰接表模型

嵌套集模型

我應該使用哪一個?原因(理論上)在一個州內可能存在無限級別(我聽說鄰接對於無限的子級別來說並不好)。這個龐大的數據集哪個最快?

謝謝!

最佳答案

這篇文章中,Quassnoi創建了一個表格在層次結構中包含2,441,405行,並測試嵌套集和鄰接列表的高度優化查詢的性能。他運行各種不同的測試,例如獲取祖先或後代並對結果進行計時(閱讀文章以獲取有關測試內容的詳細信息):

                                      Nested Sets    Adjacency Lists
All descendants                        300ms         7000ms
All ancestors                           15ms          600ms
All descendants up to a certain level 5000ms          600ms

他的結論是,對於MySQL,嵌套集的查詢速度更快,但缺點是更新速度要慢得多。如果您有不頻繁的更新,請使用嵌套集。否則更喜歡鄰接列表。

您可能還希望考慮使用另一個支持遞歸CTE的數據庫是否適合您。

我認為這個大小的XML文件需要花費相當長的時間來解析,但是如果你可以將解析後的結構緩存在內存中而不是每次從磁盤讀取它,那麽對它的查詢將非常快。

請註意,使用MySQL存儲heirarchical數據的主要缺點是它需要一些非常復雜的查詢。雖然您可以從我鏈接的文章中復制代碼,但如果您需要稍微修改它,那麽您將必須了解它是如何工作的。如果您希望保持簡單,那麽XML肯定具有優勢,因為它是為此類數據而設計的,因此您應該能夠輕松地創建所需的查詢。

轉載註明原文: MySQL中的分層數據與XML一樣快,可以檢索?