数据库中的null有什么影响?

时间:2011-04-17 09:20:42

标签: database null

数据库的实现方式各不相同,以及它们如何处理数据的查询和存储。

具有空值属性是否会占用存储空间?

具有空值属性是否会影响查询数据的速度?如果数据存在与否,基本上会查询更快或更慢。注意。我不是在问如何加快查询数据。

所以我的问题是一般性问题,但可以随意回答一个特定的数据库实现,如sql server或sqlite。

3 个答案:

答案 0 :(得分:2)

在我所知道的数据库中,NULL 不会消耗比非NULL值更多的空间,它仍然必须允许最大大小。但是,列可以为NULL的事实可能会占用额外的存储空间。

这是因为,除了可能的值之外,还必须存储每行的列为NULL的事实。但是,这在存储方面非常有效。

对于NULLable列,查询所需的额外时间最多为零。

你真的不在乎是否需要更多时间。数据库的设计是由数据的要求驱动的,而不是它运行的速度。我并不是说你应该完全忽略性能,但是,如果你的列需要存储NULL值,那么无论性能如何都需要它。

答案 1 :(得分:2)

关于磁盘空间,以下内容适用于SQL Server(可能但不确定,可能适用于其他引擎)。

固定大小的数据类型存储NULL值作为默认数据类型大小:0代表数字,''代表字符。假设您有一个CHAR(5)列:NULL值,您将填充5个字节。

可变大小数据类型存储具有空值的NULL值。假设您有一个VARCHAR(10)列:NULL值,您将填充0个字节。

关于查询,对于所有数据库,它取决于查询。对于某些命令进行比较,对于其他命令则进行比较。这个SQLite page的第一个表应该满足您的好奇心。

答案 2 :(得分:1)

是的,NULL确实占用了存储空间。通常,该字段使用一位来存储NULL状态,因此表中的所有行都使用此额外位,无论它们是否为NULL。这是区分NULL和其他值(例如,在NULL和0之间)的唯一方法。

如果您担心这一点,请确保在不需要额外功能的情况下将字段标记为NOT NULL。