2013-03-07 48 views
3

我有下表與大量的數據,這就是爲什麼我想拆分或分區它。問題是我想通過一個不是主鍵的列進行分區:project_id。在我的情況下,將最多2個或3個不同的項目標識...Mysql:分區與主鍵

- id (PRIMARY KEY, AUTO INCREMENT) 
- project_id (INT) 
- username (UNIQUE) 
- username_md5 (UNIQUE) 
(- ... more but irrelevant columns) 

正如你可以看到我有3列,我需要保證是唯一的(ID,用戶名,username_md5)。 現在,我想在project_id列上做一個RANGE分區。 我想出的唯一解決方案是爲所有列創建一個醜陋的4列PRIMARY KEY(分區要求分區表達式中的所有列必須是每個唯一鍵的一部分)。現在

,我想知道

A)是一個4列主鍵就好了可用?

B)有沒有更好的解決方案,我的分區?

C)否則我會通過爲每個project_id創建一個「動態」表來手動完成它,這可能是最簡單的解決方案嗎?

回答

1

您可以移除主要 /獨特的鍵,使之成爲簡單的按鍵,而且比上做PROJECT_ID一個簡單的範圍分區,現在它確實需要在所有

你仍然有關鍵快速訪問,因爲這些字段被編入索引。

您可能仍然希望保留的獨特性:

  • 做到在應用層
  • 做用它嵌套插入與選擇
  • 你可以使用額外的表,唯一約束添加他們​​(只組合),請參考表中的組合
+0

你好邁克爾,我不明白你的解決方案。 那麼,我應該放棄我的主鍵並創建一個唯一的鍵? 唯一的鑰匙應該跨越所有4列嗎? 否則,project_id不能是唯一的,那麼我應該使用什麼樣的密鑰? 感謝您的回覆。 – 2013-03-07 10:24:00

+0

@Benedikt,刪除所有主鍵和唯一鍵,並使它們成爲唯一鍵,讀取'unique key'和'key'之間的區別,您不需要添加任何新的span鍵,我不認爲您需要強制project_id通過使用唯一的密鑰是唯一的,爲什麼你應該執行什麼查詢? – Michael 2013-03-07 10:34:50

+0

這工作正常,謝謝!所有4列現在都有自己的簡單密鑰。 但是,我現在可以保證「username」和「username_md5」是唯一的嗎? (ID是自動增量,所以我想它會沒事的)。 – 2013-03-07 10:42:16