通常,我们通常希望所有varchar
/nvarchar
列均不可为空,并使用空字符串('')作为默认值。团队中的某人建议nullable更好,因为:
这样的查询:
Select * From MyTable Where MyColumn IS NOT NULL
比这更快:
Select * From MyTable Where MyColumn == ''
任何人都具有验证这种说法是否正确的经验吗?
最佳答案
在某些平台(甚至版本)上,这将取决于对NULL进行索引的方式。
我对于NULL的基本经验法则是:
一个很好的例子是对地址线进行建模。如果您有一个AddressLine1和AddressLine2,那么第一个具有数据,第二个为NULL意味着什么?在我看来,您要么知道地址,要么不知道地址,并且在数据集中有部分NULL的情况只是在有人将它们串联并获得NULL时才提出麻烦(ANSI行为)。您可以通过允许NULL并添加检查约束来解决此问题-所有地址信息都为NULL或全都不为。
中间名字首字母/名称类似。有些人没有。这与未知是不同的吗?您在乎吗?
另外,死亡日期-NULL是什么意思?没死?未知的死亡日期?很多时候,单列不足以对领域中的知识进行编码。
因此对我来说,是否允许NULL很大程度上取决于数据的语义-性能将是第二位,因为对数据的错误解释(可能被许多不同的人)通常比性能要昂贵得多。
看起来似乎有点小事(在SQL Server中,实现是与行一起存储的位掩码),但在我看来,只允许在对齐后使用NULL似乎效果最好。它在开发的早期就捕获了问题,迫使您应对假设并了解您的问题领域。
关于sql - 可空与非空varchar数据类型-查询哪种更快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3075958/