gpt4 book ai didi

mysql - 合并具有一对一关系的表

转载 作者:可可西里 更新时间:2023-11-01 06:39:50 25 4
gpt4 key购买 nike

我有 3 个 MySQL 表用于成员(member)系统。

  • users:成为用户的最低要求,仅与帐户信息(电子邮件、密码、is_activated 等)有关
  • user_profiles:用户提供的个人信息(姓名、地址、电话……)
  • user_member_profiles:由管理员严格管理的信息(支付的注册费、参加的 session 等)

这些可以压缩到一个表中,让我省去麻烦并保持代码整洁 - 但我觉得最好将它们分开,因为它们的用途略有不同。

选项 1:保持这种方式并继续执行 JOIN 和乏味的 UPDATE (这条数据转到这张 table ,这件作品转到另一张,等等)。对我来说更多的工作,但也许它更有意义?

选项 2:将所有内容合并到一张表中。

我假设使用一个表会更快,不需要连接表。也许这取决于数据?每个表大约有 12-20 个字段,因此合并后的表会很大。

每个用户在每个表中的个人资料不超过 1 个,但甚至可能根本没有个人资料(或者总共只有 1 个)。

为此添加一点上下文:这是一个用 PHP 编写的不断发展的 CMS,我需要为每个安装对表格进行调整。管理员需要以类似于电子表格的方式管理成员,因此我一次最多选择 200 个用户。

从性能、设计或组织的角度来看,正确的方法是什么?

最佳答案

宽表(多列)要考虑的另一个因素是对 RDBMS 缓存的影响。任何优秀的开发人员都知道您不会执行“select * from table”,因为它会通过网络将不必要的数据从 RDBMS 传输到客户端。但是磁盘和 RAM 之间可能会发生类似的影响,并且还会影响表需要缓存的 RAM 空间量。

大多数 RDBMS 分配给定的内存量来缓存数据,从而减少物理磁盘读取并加快对用户的响应。这是 Oracle 或 SQL Server 中的缓冲区缓存

如果您有一个宽表并以“从表中选择 col1、col2、col3”的形式发出查询,RDBMS 会将完整的行加载到 RAM 中(不是 col1 到 3)。当它这样做时,它会使旧的缓存数据老化。如果你的表很宽并且你加载了 50 列,你当然需要比相同行数 * 窄表更多的 RAM。这会对 RDBMS 性能产生显着影响。

很多宽表,其他表从缓存中老化,并且可以看到 IO 统计数据达到顶峰,因为常用表在缓存中老化,为宽表腾出空间。

这个因素应该被添加到规范化数据的其他优势中,并在表设计时考虑在内。实际上,如果您有一个可能很宽的表,其中一些数据会经常访问,而另一些数据很少访问,请考虑具有 1 对 1 关系的多个表。

关于mysql - 合并具有一对一关系的表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5810761/

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