這個問題是關於性能,而不是關於可能的解決方案。MySQL:將一個表分成多個表(相同的列)以提高性能?
我的系統包含許多不同類別的項目。每個類別都有自己的表格,因爲每個表格都有很多行,而且這些字段是不同的。
ItemA - id, fld1, fld2
ItemB - id, fld1, fld3, fld4
ItemC - id, fld1, fld3, fld5
....
現在需要管理用戶庫存,這意味着用戶有一個物品或沒有物品。一種選擇是使用單個表:
Inventory - category_id, item_id, user_id
CATEGORY_ID是意達,ItemB,...行不同的,這就是我們如何區分。
第二個選項是有:
InventoryA - item_id, user_id
InventoryB - item_id, user_id
...
第一個選項可能是最容易管理,但庫存表是巨大的:和經常(量級上的所有類別的次用戶數量的項目數)更新並經常查詢。
第二個選項會更難管理(因爲我們爲每個類別創建一個新的庫存表),但可能會引入性能增益,因爲它可能會阻止競爭條件。沒有單個查詢可能需要涉及多個庫存表,因爲這些類別是相當分離的。
目前系統使用MySQL和InnoDB引擎。 有〜10個類別,但預計在不久的將來會增長到幾十個。最大的類別有> 200k項目,大部分類別> 10k項目。 單個庫存表具有> 10M行,並且隨着更多用戶加入,預計將獲得更多。
我知道最好的是測試這兩種方法的性能和決定,但事實是,它將不會如此快速和無痛地移動到多表設計。
如果您有個人經驗有類似的問題,請分享。
感謝
可以將一個項目被很多用戶所擁有(使用)? – 2009-12-04 22:55:27
是達米爾,這是一個多對多的關係。 – Colnector 2009-12-05 09:54:20