gpt4 book ai didi

php - MySQL高效: multiple tables or columns with nulls

转载 作者:行者123 更新时间:2023-11-29 12:08:10 24 4
gpt4 key购买 nike

我正在为用户列表开发 MySQL 数据库,并且我正在尝试确定设计它的最有效方法。

我的问题在于,有 3 种类型的用户:“一般”、“普通”和“ super ”。普通用户和普通用户仅在某些列的值上有所不同,因此存储它们的模式是相同的。但是, super 用户至少需要存储 4 列额外的信息。

此外,每个用户都需要一个唯一的user_id,以供网站其他部分引用。

因此,我可以将所有 3 个用户保留在同一个表中,但是这样我就会为一般用户行和普通用户行存储大量 NULL 值。

或者,我可以将用户分为 2 个表:一般/普通和 super 。这将消除大量的 NULL,但需要做更多的工作来跟踪 user_ids 并确保它们是唯一的,因为我必须在 PHP 中处理它,而不仅仅是这样做上面单表解决方案中的 SERIAL 列。

哪种解决方案在内存使用和性能方面更高效?

或者还有其他我没有看到的更好的解决方案吗?

谢谢!

最佳答案

如果每个用户都需要一个唯一的 ID,那么您的问题就得到了答案:您需要一个带有 UserId 列的 users 表。通常,该列将是自动递增整数主键列——这是一种很好的实现方法。

如何处理其他列?这取决于许多不同的因素,您的问题中没有很好地解释这些因素。

可以将所有列存储在同一个表中。事实上,您可以实现 View ,这样您就只能看到一种类型的用户。但是,如果许多额外的列是固定宽度的(例如数字),则仍然会分配空间。这是否是一个问题只是列的性质和不同用户的相对数量的问题。

您还可以将每种类型的额外列存储在其自己的表中。这将使用 UserId 与原始表建立外键关系。如果这两个键都是主键,那么join应该非常快。

还有更多奇异的可能性。如果列不需要索引,那么 MySQL 5.7 支持 JSON,因此它们可以全部放入一列中。某些数据库(特别是面向列的数据库)允许“垂直分区”,其中单个表中的不同列存储在单独的分配单元中。 MySQL(尚)不支持垂直分区。

关于php - MySQL高效: multiple tables or columns with nulls,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31118356/

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