1

我已经阅读了对有多少列太多的问题的更细致入微的回答,并想提出跟进。

我继承了一个相当混乱的项目(一个调查框架),但有人可能会争辩说数据库设计实际上是正确规范化的,即一个人的属性与问题的数量一样多。
我不会在辩论中为这个概念辩护,但更紧迫的一点是我的时间非常有限,我正在努力帮助这个框架的用户,我现在能想到的最快解决方法是减少行大小. 我怀疑我是否有能力在我拥有的时间内更改数据库模型。

现在的列数是 4661,但他们有望将其减少到至少 3244,可能更少(通过减少实际问题数)。硬列限制是 4096,但现在我什至没有成功添加 2500 列,大概是因为行大小限制为 65,535 字节。

但是,当我计算行大小时,我最终得到的值要低得多,因为几乎所有列都是 TINYINT(调查响应范围为 1-12)。它甚至不适用于 2000 个 TINYINT(一个失败的示例查询)。

使用文档中给出的公式,我得到 4996 字节或更少。

column.lengths = tinyints * 1
null.columns = length(all.columns)
variable.lengths.columns = 0
(row.length = 1+
    (column.lengths)+ 
    (null.columns + 7)/8+ 
    (variable.lengths.columns)
)
## 4996

我在该行长度计算中误解了什么?

4

1 回答 1

1

我忽略了这一段

因此,使用长列名可以减少列的最大数量,包括 ENUM 或 SET 列,或者使用列或表注释。

我有很长的列名,用序列号替换它们可以让我有更多的列(约 2693),我必须看看增加是否足够。我不知道它们是如何保存的,大概是作为字符串,所以也许我可以使用字母进一步减少它们。

于 2012-09-28T14:48:03.347 回答