【问题标题】:Performance optimization: Null allowed/not allowed vs Performance, if not a key [duplicate]性能优化:允许/不允许空与性能,如果不是键[重复]
【发布时间】:2011-11-14 06:54:22
【问题描述】:

可能重复:
NULL in MySQL (Performance & Storage)

如果:

  • 该列不是键,
  • 该列可以选择或插入到表中或更新,但从不用于 WHERE、连接和任何查询的其他部分(当我们决定索引哪个列以获得更好的性能时,可以计算 WHERE、JOIN 等)。

那么,如果您将上述列的复选框“NULL”选中(即允许 NULL),是否会影响性能?

我希望答案(至少对于 MySQL)是:

  • 不,即使是 1% 也不会影响,或者
  • 不,完全不会影响。

【问题讨论】:

  • 不要认为 检查或取消检查 NULL 是您在 MySQL 客户端(可能是 phpMyAdmin)中所做的。您实际上在做的是允许该列在相应的 CREATE/ALTER TABLE 语句中包含或不包含 NULL 值。

标签: mysql performance optimization null


【解决方案1】:

是的,我建议您创建任何不需要为 NULL 的列,而不是 NULL。

在我看来,默认情况下启用 NULL 是 SQL 中的“错误”之一。

原因与性能无关,而是为了应用程序的正确性。如果您有一个强制性的列值,则将其设为 NOT NULL 更有意义(实际上,NULL 值将是一个错误)。如果有意义,请使用 DEFAULT 值。

简而言之:除非在您的数据库结构中有正当理由使其为空,否则任何列都不应为空。

还要注意,NULL 在唯一索引中做了一些“特殊”的事情 - 允许多行带有 NULL。

【讨论】:

    猜你喜欢
    • 2014-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-02
    • 1970-01-01
    • 1970-01-01
    • 2015-05-06
    相关资源
    最近更新 更多