使 table 非常大的列数是多少?

What is the number of columns that make table really big?

我的数据库中有两个table,一个用于登录,第二个用于用户详细信息(数据库不是只有两个table)。登录 table 有 12 列(Id、电子邮件、密码、电话号码...),用户详细信息有 23 列(工作、城市、性别、联系信息...)。两个table是一对一的关系。

我正在考虑创建一个 table,其中包含两个 table 的列,但我不确定,因为这可能会使 table 的大小变大。

所以这引出了我的问题,使 table 变大的列数是多少?是否有某个或近似的数字使 table 的大小变大并使我们停止向 table 添加列并创建另一个列?还是由程序员决定这个数字?

让我们停止向 SQL 中的现有 table 添加列的约束是,如果我们超过了数据库引擎可以支持的单个 table 的最大列数.可以看出 here,对于 SQL 服务器,非宽 table 有 1024 列,宽 table 有 30,000 列。

35 列对于 table 来说并不是特别多的列。

列数实际上不是问题。您似乎担心的任何类型的性能问题都可以归因于 table 上的数据大小。即,如果 table 有数十亿行,或者如果其中一列在每个单独的行上包含 200 MB 的 XML 数据,等等

通常,由多个列引起的唯一问题是它与索引的关系,因为尝试创建 100 个不同的索引来覆盖每个查询的每个变体会很麻烦。

这里的要点是,我们无法真正给您任何建议,因为仅 table 的数量、列和关系的信息不足以继续进行下去。它可能完全没问题,也可能没有。数据的性质,以及如何通过适当的规范化、索引和统计来解释这些数据,才是真正重要的。

分解 table(按列拆分)可能是可取的,原因有很多。初学者应该学习的首要原因之一是数据规范化。数据规范化与性能没有直接关系,尽管规范化的数据库有时会胜过构建不佳的数据库,尤其是在负载下。

规范化的前三个步骤产生第一、第二和第三范式。这些形式与非键值与键的关系有关。一个简单的总结是,第三范式中的 table 是所有非键值都由键决定的,整个键,只有键。

有大量的文献可以教您如何规范化、规范化的好处是什么以及有时有什么缺点。一旦您精通规范化,您可能希望了解何时偏离规范化规则,并遵循像星型模式这样的设计模式,这会产生结构良好但不是规范化的设计。

有些人将正常化视为一种宗教,但这种想法有点过头了。学习这绝对是一件好事,但它只是一组指南,可以经常(但不总是)引导您朝着令人满意的设计方向前进。

规范化数据库在更新时往往优于非规范化数据库,但可以构建非规范化数据库,它对于某些类型的检索速度非常快。

当然,所有这些都取决于您要构建的数据库数量、它们的大小和范围,

我认为登录 tables 包含仅在用户登录您的系统时使用的数据。对于所有其他目的,使用详细信息 table。

将这些数据集分离到单独的 table 中是个不错的主意,并且可以非常适合您的应用程序。但是,另一种选择是将数据放在一个 table 中并使用覆盖索引将它们分开。

似乎没有人考虑的索引的一个方面是索引可以被认为是 table 中的子 table。当 SQL 语句仅访问索引中的字段时,执行操作所需的 I/O 可以仅限于索引而不是整行。因此,创建 "login" 索引和 "details" 索引将获得与单独的 table 相同的好处。额外的好处是任何确实需要所有数据的操作都不必执行两个 table 的连接。