这个问题与性能有关,与可能的解决方案无关。
我的系统包含许多不同类别的项目。每个类别都有自己的表格,因为每个表格都有很多行且字段不同。
ItemA - id, fld1, fld2
ItemB - id, fld1, fld3, fld4
ItemC - id, fld1, fld3, fld5
....
现在需要管理用户库存,这意味着用户有一个项目。一种选择是使用单个表:
Inventory - category_id, item_id, user_id
对于ItemA,ItemB,......行,category_id是不同的,这就是我们区分的方式。
第二个选项是:
InventoryA - item_id, user_id
InventoryB - item_id, user_id
...
第一个选项可能是最容易管理但是库存表很大(数量级:所有类别的项目数乘以用户数)并经常更新和经常查询。
第二个选项将更难管理(因为我们为每个类别创建一个新的库存表),但可能会带来性能提升,因为它可能会阻止竞争条件。没有单个查询可能需要涉及多个库存表,因为类别是相当分离的。
目前系统使用MySQL和InnoDB引擎。 有大约10个类别,但预计在不久的将来会增长到几十个。最大的类别有> 200k项目,大部分都有> 10k项目。 单个库存表具有>随着越来越多的用户加入,预计会有10M行增加。
我知道最好的方法是测试两种方法的性能并做出决定,但事实是,转移到多表设计不会那么快速和轻松。
如果您有类似问题的个人经历,请分享。
谢谢
答案 0 :(得分:4)
规范化数据库通常对性能和可维护性更好。
这种方法会创建一个表Items
,它与ItemA,ItemB等具有1:1的关系。然后,您可以创建一个与基础{{1}有关系的Inventory
表。 } table。
根据documentation,InnoDB支持行级锁,因此不需要使用多个表来防止死锁。
答案 1 :(得分:1)