2008-11-27 54 views
2

我有一個網站,其中有成員互相發送消息。有成爲幾個成員,他們喜歡發送消息 - 我相信你可以看到這是怎麼回事。如何在MySQL表格上拆分數據

存儲在一個很好的關係表目前我已經說過狡猾的消息標題爲「口號」,不同狀態的IDS表示,呃,狀態(未讀,保存等)。我知道這是在事實之後,但我認爲我真的需要將此表分成幾個其他人(例如,每個狀態類型多於一個),並且我不確定最佳方式是什麼關於它。

我有幾個想法,其中沒有一個是火箭科學,但我很好奇,如果這有一個'標準解決方案'。谷歌建議不要,但是這種類型的問題並不是像我所想的那樣,在像stackoverflow這樣的地方以外。

任何了 - 有 - 做 - 這了嗎?

回答

3

我會毫不猶豫地將'messages'表分成多個。例如:

MessageStatus 消息 MessageText中

這樣,如果你在別人的收件箱中顯示的項目列表,你只需要掃描「消息」表,該表是最大較小,固定長度列尋道速度。當有人想要打開並查看消息正文時,您可以點擊'MessageText'表。 '消息狀態'只是一個查找表,用於將一個tinyint FK加入到'消息'表中。

您可以在1個表格中獲得更多的性能,並且可能具有中等文本列。

0

你有沒有想過可能有一個存檔過程,可以存檔任何一段時間之後的某段時間?

通過適當的索引和微調你就必須有相當多的信息需要跨多個表移動它們,除非它與空間的問題。

0

使用大量數據的消息表沒有任何問題。沒有理由分裂它,如果你不需要它。

如果你擔心這個表的性能,首先選擇你的存儲引擎明智地取決於你的需求:我的建議是使用InnoDB的,因爲這將是寫密集型。然後查看索引以加快您的閱讀速度。

如果表中真正得到過大,速度慢,你可以做什麼,是創建2個表:

  • 一個messages_archive表,用MyISAM存儲(僅用於「存檔」快速檢索和搜索消息)。

  • 一個messages_inbox表,與InnoDB存儲:這是在新郵件被頻繁插入該表。

可選:

  • 一個messages_drafts,保持自動保存的消息。原因:無需使用草稿消息來減慢收件箱表的速度。

順便說一句,這不是一個「標準解決方案」如你所說,只是一個想法。 :)

編輯:

從你的評論,我理解你正在尋找的其實是 「Partitioning」。

不同的MySQL分區類型允許您按範圍,列表,鍵或散列物理分隔數據。

+0

良好的建議(特別是存儲引擎,雖然沒有),謝謝。我實際上正在考慮構建多個「messages_archive表」的最佳方法 – da5id 2008-11-27 04:57:43

+0

我剛剛編輯了我的文章以給出一個新答案。 – Franck 2008-11-27 05:13:26