2012-03-13 43 views
1

我有一個包含大約50萬行的大型表,它正在共享託管服務器上收費。我想把這個大表分成3-4個小表,因爲我們在共享主機環境中沒有其他選擇。在分解的時候,我會保留原來的大表,只取出一個包含大量文本的特定列,並將其分割成更小的表格。 我在找,現在是一個解決方案,其中,我必須做的PHP代碼最小的變化和表可以分成若干個如下:將一列指向另一個表中的列

MAIN_TABLE

id | column1 | column2 | column3_just_pointer 

smaller_table_1

id | main_table_id | column3 

smaller_table_2

id | main_table_id | column3 

_table_3

id | main_table_id | column3 

如果MySQL已經類似指針可以指向在較小的表欄3上執行的選擇命令:選擇ID,從MAIN_TABLE column3_just_pointer,我可以分割在上述方式和前端PHP代碼表根本不需要編輯。 我希望我聽起來很清楚。這裏有沒有人知道是否以及如何實現這一目標?謝謝你的時間...

請注意:意見不能使用,因爲它會阻止我創建多個小表。

回答

0

我結束了水平使用諸如smaller_table_1,smaller_table_2等名稱對錶進行完全分區,並在單獨的表中記錄每個表的開始和結束ID,說'main_table'。新數據只添加到最後一個表中,當一個表跨越40000行時,我的應用程序會自動創建一個新表small_table_n,並將該新表的信息放入main_table。

我在3月份問到了這個問題,直到現在 - 7月份,這個設置在我的3個網站中完美運行,我的3臺主機也都很滿意這些站點沒有佔用更多的服務器資源。

0

如果你在做垂直分區,你可以創建一個視圖來「合併」所有涉及的表,因此應用程序根本不需要知道底層表。 例如,

TABLE main_table(id -PK, column list); 
TABLE detail1 (main_id - PK,FK to main_table, column list); 
TABLE detail2 (main_id - PK,FK to main_table, column list); 

CREATE VIEW main_view AS 
SELECT a.id, [columns from main_table], [columns from detail1, detail2, etc] 
FROM maint_table a 
LEFT JOIN detail1 b ON (b.main_id = a.id) 
LEFT JOIN detail2 c ON (c.main_id = a.id) 

現在,所有的應用程序select S可針對main_view完成。

+0

但是,如果我使用視圖的問題是,我已經從主表中取出的列不能拆分成多個表。我只需創建一個small_table_1,然後將該特定內容的所有50萬行放在該表中...感謝您的回覆...... – Vishnu 2012-03-13 16:24:04

相關問題