2011-04-06 66 views
0

我正在編寫一個由MySQL支持的Web應用程序,並且在許多情況下,每天都可以創建數千行,可能更多取決於誰正在使用它。它將用於存儲各種對象,例如帖子和頁面(CMS,但不是CMS)。MySQL:節省空間/減少負載的最佳方法

主對象表將託管這些對象以及對象的修訂版本,並且我希望在可能的情況下減少存儲需求並提高性能。例如,狀態字段爲enum,因爲枚舉存儲爲整數,而不是文本,因此減少了存儲空間。

我想知道是否還有其他技術我也應該使用。

此外,還有一個object_type字段。類型可以通過插件等來創建。 object_type應該是一個字段還是存儲在另一個表中並由主對象表中的ID引用(一對多關係)。不復制數據的存儲收益是否大於必須進行兩次查找才能獲取數據的性能成本?

+2

你能更模糊嗎? – 2011-04-06 20:50:19

+0

關於我的問題或關於我正在構建的應用程序? – 2011-04-06 20:52:11

回答

2

乍一看,這篇文章看起來像一個過早優化的嚴重情況(有人說它是萬惡之源)。此外,說你的數據存儲是CMS類似的,但不是一個CMS似乎相當......困惑。將內容存儲在數據庫中並不會使您看起來像CMS一樣,它是處理您的內容的工作流程(您輸入內容的方式以及如何顯示最終表示的內容),而不是內容機制。

這就是說,這聽起來像你正試圖優化你的表中的數據類型,這就好了。對於這種事情,沒有比the documentation更好的瞭解MySQL的詳細信息。在瀏覽了您可以使用的內容之後,就如何組織您的不同模式做出明智的決定將會容易得多。

即便如此,不要過於強烈地束縛自己。給自己留出很多空間來呼吸和成長,如果您發現應用程序的增長方式與您的原始設計路徑有很大區別,那麼您可以非常輕鬆地重新訪問該問題。這種優化幾乎不影響磁盤空間,即使在每張表有數百萬行的情況下,只要您甚至幾乎接近實際使用情況,也會有數十個表。

爲了提高查詢的效率,我可以提供的最好的方法是有效地使用JOINs來約束每個查詢有多少數據。

5

你沒有提到正確性是你有興趣維護的東西。 我建議你從數據庫中概率地刪除對象。這將大大減少空間並可能提高性能。

+1

這是個玩笑嗎? – 2011-04-07 04:37:29