2013-08-18 127 views
0

我在MySQL中構建了一箇中等大小(100,000條目)的表,我試圖優化它的速度。這些條目包含一些事務性數據,這些數據顯然會保存在MySQL中。其餘的數據在表的生命週期中不會改變,也不適合表格格式(即一些條目將包含其他條目不會的字段,導致很多'空'值)。此外,第二部分的大部分數據都會重複,這意味着可能只有500-1000個獨特的數據集,然後與表中的條目配對。大數據量重複數據的MySQL數據庫優化

我在考慮三種組織數據的方法。 1)以表格格式保留MySQL中的所有數據。 2)序列化非唯一數據並將數據保存在單個MySQL字段中。 3)序列化非唯一數據並保存到硬盤中的文件中,由MySQL表中的指針引用。

我的問題是你會推薦哪種格式,爲什麼?考慮到我將在數據庫上運行很多查詢,哪一個會最快?

+0

數據的例子會有很大的幫助。最重要的問題是:「你打算如何使用它?」 –

+0

也許一個更簡單的方法是,表中的每個條目都是更大類型對象的子類。我將存儲MySQL中子類實例所特有的所有變量,因爲我需要頻繁搜索和更新這些變量。但是我還需要讀取(而不是寫入)對大類擁有的變量的訪問。 –

+0

例如,我有對象A,B和C.條目1,2,3,4和5是A,B和C的實例,其中1-> A,2-> A,3-> B, 4→B和5→C。存儲所有A實例共有的數據的最佳方式是什麼? –

回答

0

這聽起來像你正在描述規範化的數據庫。這是非常標準的。你可以將「更大」的實體作爲一個帶有id的單個表。

對於更大量的數據,您可以參考id,稱爲外鍵。這是關係數據庫設計的結構。 「關係」的部分含義是實體之間的關係。

如果您只有幾十列,我不擔心某些值在某些行中爲NULL,而其他行在其他行中爲NULL。如果您有多種類型的實體,那麼您也可以在數據結構中反映這一點。

編輯:

規範化可以對性能有好的和壞的影響。在減小數據大小的情況下,性能往往比非規格化數據更好。如果你有適當的索引結構,那麼標準化的數據結構通常工作得很好。

+0

是的,我的第一本能就是像這樣對數據進行規範化處理,但恐怕這會使我的查詢數量增加一倍(一次獲取子類,一次獲取主類),這會嚴重降低性能。 –

0

使用索引引擎之一,如Sphinx,不要重新發明車輪。 Sphinx根據搜索/查詢選項組織數據,並且速度非常快,可以處理大量數據。如果您的數據庫不經常更改,您只需運行一次Sphinx Indexer。這個解決方案的缺點之一就是,獅身人面像索引文件非常大。

0

閱讀this這將幫助你。

你也可以使用this,你可以找到你的答案。