1

我有一个在线表格,用户必须在其中提交一些多项选择答案,并且可以选择插入他们的电子邮件地址(以便及时了解结果)。然而,真正做到这一点的人却寥寥无几。

所以目前我有一个包含 3 列的表:submission_id INTencoded_answers varchar(20)email VARCHAR(50). 然而,考虑到 95% 的电子邮件条目是 NULL,这是相当浪费的。

当然,我可以使用两张桌子:一张大的用submission_idand encoded_answers,一个小的用submission_idand email。但是一张桌子内也有解决方案吗?稀疏类型列的排序,如果字段不为NULL,只会占用空间?

4

2 回答 2

6

为什么会浪费?你有没有做过任何测试来证实这一点?没有值的列实际上并不占用太多空间,也许每行每列一个字节。这VARCHAR就是全部内容,可变长度。

此外,任意将您的字段限制为较短的长度实际上被认为是有害的。电子邮件地址超过 50 个字符的情况并不少见。请注意,对于等长的字符串,VARCHAR(50)和的存储要求VARCHAR(255)是相同的。它仅适用于长度为 256 及以上的列,您将以额外长度字节的形式支付。

请记住,如果数据不适合该字段,MySQL 将任意截断您的数据。这对于电子邮件地址等重要数据非常不利

于 2013-07-10T20:10:37.570 回答
0

不在SQL中,不。您应该考虑使用NoSQL引擎来完成此类任务。

于 2013-07-10T20:10:03.440 回答