【发布时间】:2009-12-21 04:31:10
【问题描述】:
这样做有什么缺点?
【问题讨论】:
标签: sql mysql database-design null data-modeling
这样做有什么缺点?
【问题讨论】:
标签: sql mysql database-design null data-modeling
将其设置为 默认 没有任何缺点,因为一旦您不为其设置值,这很重要。
如果 value 变为 NULL,它可能会对查找产生影响。这是因为 MySQL 会查看文件,并且跳过已知长度的字段很容易,因为您只需跳过该长度即可。但是,如果一列可能包含 NULL,则需要在进行跳转之前对其进行检查。不过不需要太多时间,所以我认为这并不重要。
优点显然是节省空间,但存储便宜。毕竟是 2009 年。
查找内容的最快方法是将所有列设置为 NOT NULL,而是使用空字符串和 -1(或者甚至 0,如果这并不意味着其他东西)之类的东西来存储“null”值。它不会占用太多空间,而且总是更快,因为数据的长度是有保证的。
但是,如果您的数据库相对较小并且不需要在 2 毫秒内过滤 8 亿行,那么请随意使用 NULL 值。 ;)
【讨论】:
允许列为 null 的缺点会影响业务逻辑 - null 意味着实际上没有关联的值,但可能存在。如果这不适合您的业务规则,则该列不应允许其中存在空值。
众所周知,NULL 值在某些情况下查询执行成本很高,并且某些数据库不会评估 null 值相等的两列。
顺便说一句:虽然您可以设置一个 DEFAULT 约束以使列值为空,但这比必要的工作要多。创建或更改表时,列定义包含三个组成部分:
【讨论】:
设置 某些字段/列的默认值为 MySQL中的NULL?
我认为是的。因为无论数据类型如何,NULL 都占用最少的内存
【讨论】:
根据您的 DBMS,NULL 将是默认值。也就是说,只要你不提供值,并且没有设置默认值,就会存储一个 NULL(当然,NULL 是不被禁止的)。
NULLS 的真正代价是在解释值时出现。 SQL 在评估可能涉及 NULL 的表达式时使用了一种奇怪且有时违反直觉的三值逻辑。第三个值是 UNKNOWN,反直觉的部分是 NOT UNKNOWN 等于 UNKNOWN。如果你不小心,你可能会得到错误的结果。
如果某些条目在 COLUMN 中有 NULL,并且这些条目在现实世界中具有值,则可能会低估 SUM(COLUMN) 之类的统计数据。
但真正让人头疼的是数据库设计人员和程序员倾向于使用 NULL 来传达某种有意义的信息,而不仅仅是“这里没有数据”。这几乎总是会导致逻辑错误。如果您有数据,请存储数据。如果您没有数据,也别无选择,请存储 NULL。并且不要让自己被缺乏数据所误导。
【讨论】:
仅从列定义中省略 NOT NULL 有时会对性能产生重大影响。所以我已经习惯于尽可能地包含它。
【讨论】: