2013-07-04 45 views
0

我有一個約20列的表格。在MySQL中水平分區

----------------------------------------------------------------- 
    GUID_PK | GUID_SET_ID | Col_3 | Col_4 | ... | Col_20 
----------------------------------------------------------------- 

可能有成千上萬的Sets每個有幾十到少於一千個記錄。一組中的記錄都是相互關聯的。套完全相互獨立。一整套在一次大交易中被同時讀取/寫入。一旦寫入記錄,它永遠是隻讀的,永不改變,只能讀取。數據很少從這張表中刪除。當它被刪除時,整個集合被一次刪除。

只有SET_ID是一個傳入的外鍵。 PK是到另一個表的傳出外鍵。在詳細信息表中,每個主記錄保留大約3或4條記錄(每個記錄一個斑點)。

問題是:我應該劃分表嗎?我認爲是的。我的老闆認爲更好。他希望動態創建表格,每個集合一個主要的一個細節。我個人對動態創作理念並不感到滿意,但是擔心這個「一桌一桌」的規則。

批量插入和批量選擇肯定會達到性能。批量刪除將再次對索引重新排序。什麼是最佳結構?

+0

當你插入數據像'Col_x'的所有列被填充?或只是一些? – Stephan

+0

@Stephan所有列都一次性填充。實際上兩列是可空的,有時但很少它們可能爲空。但稍後沒有更新記錄。完成了什麼。 – inquisitive

+0

在這種情況下,您可以使用散列http://dev.mysql.com/doc/refman/5.1/en/partitioning-hash.html – Stephan

回答

0

考慮到大部分Col_x列填充的,你可以做一個HASH PARTITIONING

CREATE TABLE 

.... 

PARTITION BY HASH(GUID_SET_ID) 
PARTITIONS NO_PART; 

哪裏NO_PART是您要分區的數量,這應該是建立在考慮:

1)您每天收到的數據量
2)您估計將在未來收到的數據量

你也可以檢查其他分區類型here