使用NULL值或使用有效值表示NULL

时间:2013-08-02 08:20:43

标签: mysql sqldatatypes

在我的数据库中,我目前有浮动数据。所有列都设置为NULLABLE,当缺少值时,我放置NULL

我的数据库太大了,如果我知道,这些数值在0到100之间,它们可以舍入到1位小数。因此使用float是开销,我正在考虑使用smallint(将每个浮点数乘以10并将其存储为舍入数字)。现在,NULL值如何呢? 我有两个选择:

  1. 仍然使用NULL

  2. 使用一些“越界”值(如9999)来表示NULL(并且当列没有设置任何值时,也会将此值设为默认值)。但是,在我的查询中,我需要这样做:

    SELECT AVG(NULLIF(data, 9999)) AS data, ....

    (当我使用NULL时,我可以使用AVG(data),而不会计算NULL个值。)

  3. 什么是更好用。还是有更好的技术?

4 个答案:

答案 0 :(得分:2)

为什么你会尝试“推出自己的”NULL功能,如果它已经存在?正如您所描述的那样,您对NULL的使用是正确且完全有效的。通过使用幻数作为人工NULL替换,我没有看到任何优势;你只是介绍错误的可能性。

<强> TL; DR : 使用NULL

答案 1 :(得分:1)

NULL值与固定字段(float,int ...)上的值完全相同。您不能通过不使用NULL或其他来优化空间使用。对不起:)

答案 2 :(得分:1)

如果您可以选择实际使用NULL本身,为什么要使用有效数据来表示NULL

我认为没有任何好处

答案 3 :(得分:0)

当您使用NULL表示您将此列设置为“空”时,在第二种情况下,您会为列添加一个代表NULL的值。

所以首先你没有设置你的列,然后你设置一个显示它是NULL的值。这取决于你想做什么。如果您希望在该列上的数据库中承诺使用第二个,否则如果您想要为空,除非您使用NULL填充它。