我已经阅读了对有多少列太多的问题的更细致入微的回答,并想提出跟进。
我继承了一个相当混乱的项目(一个调查框架),但有人可能会争辩说数据库设计实际上是正确规范化的,即一个人的属性与问题的数量一样多。
我不会在辩论中为这个概念辩护,但更紧迫的一点是我的时间非常有限,我正在努力帮助这个框架的用户,我现在能想到的最快解决方法是减少行大小. 我怀疑我是否有能力在我拥有的时间内更改数据库模型。
现在的列数是 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
我在该行长度计算中误解了什么?