在我的数据库中,我目前有浮动数据。所有列都设置为NULLABLE,当缺少值时,我放置NULL
。
我的数据库太大了,如果我知道,这些数值在0到100之间,它们可以舍入到1位小数。因此使用float是开销,我正在考虑使用smallint(将每个浮点数乘以10并将其存储为舍入数字)。现在,NULL
值如何呢?
我有两个选择:
仍然使用NULL
使用一些“越界”值(如9999)来表示NULL
(并且当列没有设置任何值时,也会将此值设为默认值)。但是,在我的查询中,我需要这样做:
SELECT AVG(NULLIF(data, 9999)) AS data, ....
(当我使用NULL
时,我可以使用AVG(data)
,而不会计算NULL
个值。)
什么是更好用。还是有更好的技术?
答案 0 :(得分:2)
为什么你会尝试“推出自己的”NULL
功能,如果它已经存在?正如您所描述的那样,您对NULL
的使用是正确且完全有效的。通过使用幻数作为人工NULL替换,我没有看到任何优势;你只是介绍错误的可能性。
<强> TL; DR 强>:
使用NULL
。
答案 1 :(得分:1)
NULL
值与固定字段(float,int ...)上的值完全相同。您不能通过不使用NULL或其他来优化空间使用。对不起:)
答案 2 :(得分:1)
如果您可以选择实际使用NULL
本身,为什么要使用有效数据来表示NULL
?
我认为没有任何好处
答案 3 :(得分:0)
当您使用NULL
表示您将此列设置为“空”时,在第二种情况下,您会为列添加一个代表NULL
的值。
所以首先你没有设置你的列,然后你设置一个显示它是NULL
的值。这取决于你想做什么。如果您希望在该列上的数据库中承诺使用第二个,否则如果您想要为空,除非您使用NULL
填充它。