2012-04-11 101 views
0

我正在開發一個日誌記錄數據庫,在這種情況下記錄的組件的ID不是由數據庫本身決定的,而是由發送報告的系統決定的。系統ID是一個唯一的varchar,組件的id由系統決定(在一些遙遠的位置),所以當組件的主鍵是system_id + component_id時,保證了唯一性。mysql中的varchar和複合主鍵?

我想知道的是,如果這種方法將是有效的。我可以使用自動遞增的整數作爲id,但這意味着我將不得不在插入之前進行選擇操作,以便我可以獲取此生成的id,而不是使用系統提供的已知字符串id。數據庫將會是小規模的,不超過幾十個系統,每個系統都有幾十個組件,並且可能有數千個組件更新(另一個表)。舊的更新將被定期轉儲到一個文件中並從數據庫中刪除,所以它不會變得「大」。

任何recomendations?

回答

1

我敢肯定,你會發現幾百萬行的表可以正確執行varchar()鍵。

這很容易測試。只需導入您的數據。

+0

我做了一些測試,數據庫執行得很好,數以十萬計的組件和component_update行(隨機生成)。它測量每個桌子上每一萬行約1mb約1MB,所以對於我期望的大小沒有問題。它爲我節省了執行更多連接並根據請求選擇的工作。我確實將id的大小限制爲32和64個字符,但對象名稱通常在16以下。 – elite5472 2012-04-13 04:39:40

1

我會傾向於自動遞增整數作爲主鍵,並將索引放在system_id和component_id上。在插入之前您的選擇將非常便宜且快速。