2013-01-21 29 views
-1

我有這個問題,一個表(表名是內容)在我的項目中有600萬條記錄。 我想拆分這個表(內容)並在cakephp中使用,但我不知道該怎麼做。如何拆分mysql表使用CakePHP 2.x

請幫幫我。

謝謝!

CakePHP version : 2.x

+0

你使用哪個數據庫,mysql? – Joni

+0

是的,我使用mysql_5.how來做到這一點? – daiguachen

+0

爲什麼你想拆分表格?您可以使用'phpmyadmin'來執行導出,並將內容導入另一個表格(具有相同的結構)。 – noslone

回答

1

指的是Partitioning?這可能是一個更好的選擇,無需額外的大量工作。

+0

你是對的,但是mysql似乎並沒有Didn'似乎分區。分區是Oracle的概念。 – daiguachen

+0

MySQL處理從v5.1轉發的分區。所以,如果你使用5.1或更高版本,那麼你很好。看看我的答案中的鏈接。點擊分區。 –

+0

謝謝你的幫助! – daiguachen

0

既然你使用MySQL,你可以在兩個(或更多)拆表,並創建他們MERGE table。然後,您可以像訪問一個大表一樣訪問合併。您的程序無需更改。

這裏有一個如何從MySQL documentation創建一個合併表的例子:

mysql> CREATE TABLE t1 (
    -> a INT NOT NULL AUTO_INCREMENT PRIMARY KEY, 
    -> message CHAR(20)) ENGINE=MyISAM; 
mysql> CREATE TABLE t2 (
    -> a INT NOT NULL AUTO_INCREMENT PRIMARY KEY, 
    -> message CHAR(20)) ENGINE=MyISAM; 
mysql> INSERT INTO t1 (message) VALUES ('Testing'),('table'),('t1'); 
mysql> INSERT INTO t2 (message) VALUES ('Testing'),('table'),('t2'); 
mysql> CREATE TABLE total (
    -> a INT NOT NULL AUTO_INCREMENT, 
    -> message CHAR(20), INDEX(a)) 
    -> ENGINE=MERGE UNION=(t1,t2) INSERT_METHOD=LAST; 

使用合併表的最佳方法取決於您的具體情況。如果您必須拆分大表,因爲它已經太大了,您可以創建其他具有相同結構的表(create mySmallTable1 like myBigTable),然後將部分數據移動到每個表中(insert into mySmallTable1 select * from myBigTable where ...)。顯然這需要一些時間,因爲MySQL必須將記錄從一個文件複製到另一個文件。然後放下大表並重新創建它作爲小表的合併。

如果大表正常,但不想插入新記錄,則可以執行其他操作:創建一個與大表結構相同的新表。定義新表和新表的合併,以便新插入新表(INSERT_METHOD選項)

+0

您有兩張具有相同結構MERGE的表格。但我有一張大桌子(5G)。現在,我是否需要拆分大表並將其導入結構一致表(有很多)?然後合併他們? – daiguachen

+0

我找不到答案,所以我更新了答案,而不是 – Joni

+0

非常感謝你!〜Chuck Burgess是對的我應該看到Mysql的手冊 – daiguachen