gpt4 book ai didi

sql - MySQL:将一个表拆分为多个表(相同列)以提高性能?

转载 作者:行者123 更新时间:2023-11-29 04:31:23 26 4
gpt4 key购买 nike

这个问题是关于性能的,而不是关于可能的解决方案。

我的系统包含许多不同类别的项目。每个类别都有自己的表格,因为每个表格都有很多行并且字段不同。

ItemA - id, fld1, fld2
ItemB - id, fld1, fld3, fld4
ItemC - id, fld1, fld3, fld5
....

现在需要管理用户库存,这意味着用户是否拥有元素。一种选择是使用单个表:

Inventory - category_id, item_id, user_id

category_id 对于 ItemA、ItemB 等行是不同的,这就是我们区分的方式。

第二个选项是:

InventoryA - item_id, user_id
InventoryB - item_id, user_id
...

第一个选项可能是最容易管理的,但是库存表很大(数量级:所有类别的项目数乘以用户数)并且经常更新和查询。

第二个选项会有点难以管理(因为我们为每个类别创建一个新的库存表)但可能会带来性能提升,因为它可能会防止竞争条件。没有一个查询可能需要涉及多个库存表,因为类别是完全隔离的。

目前系统使用MySQL和InnoDB引擎。大约有 10 个类别,但预计在不久的将来会增加到几十个。最大的类别有 > 200k 的项目,大多数有 > 10k 的项目。单个库存表有超过 1000 万行,并且随着更多用户的加入,预计会变得更大。

我知道最好的办法是测试这两种方法的性能并做出决定,但事实是转移到多表设计不会那么快速和轻松。

如果您有类似问题的个人经验,请分享。

谢谢

最佳答案

规范化数据库通常有利于性能和可维护性。

此方法将创建一个表 Items,它与 ItemA、ItemB 等具有 1:1 的关系。然后您可以创建一个 Inventory 表,它与基础 Items 表。

根据documentation , InnoDB 支持行级锁,所以不需要使用多表来防止死锁。

关于sql - MySQL:将一个表拆分为多个表(相同列)以提高性能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1850142/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com