AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 63
Accepted
BenV
BenV
Asked: 2011-01-04 15:20:37 +0800 CST2011-01-04 15:20:37 +0800 CST 2011-01-04 15:20:37 +0800 CST

默认为 NULL 还是 NOT NULL?

  • 772

在 MySQL 中,除非您知道某个字段是必需的,否则总是允许空值,或者Not Null除非您知道一个字段将包含空值,否则总是使用它会更好吗?还是没关系?

我知道在一些 DBMS 中他们说要Not Null尽可能多地使用,因为允许空值需要每条记录额外的位(或字节?)来存储空状态。

mysql null
  • 2 2 个回答
  • 19261 Views

2 个回答

  • Voted
  1. Best Answer
    David Spillett
    2011-01-04T15:28:58+08:002011-01-04T15:28:58+08:00

    在大多数NOT NULL数据库中,由于您声明的原因,列在存储数据方面会更有效,并且查询和索引也更有效 - 因此,除非您想在列中允许 NULL,否则您应该明确禁止它们。

    会有轻微的性能影响,因为NOT NULL可能需要检查您使用任何 INSERT 或 UPDATE 影响的每一行的额外约束,但由于大多数数据库是相对轻写和重读,这可能不是问题(小无论如何,花费的额外时间不太可能引起注意,因为它是一个受 CPU 限制的操作,其中其余的插入/更新操作将受 IO 限制,因此是一个更重要的瓶颈)并且它为您提供了一些“免费" 数据检查,因此您的代码(或其他人的代码)不会意外地将 NULL 放在其他代码不期望它们的位置,因此可能会在它们存在时给出不正确的结果。

    编辑:正如彼得在他的评论中指出的那样,以上是一个普遍性,可能并不适用于所有DMBS,尽管我很确定它适用于 mysql 和 mssql。该领域的其他复杂情况可能包括稀疏表(例如,在 MSSQL 2008 中实现的)之类的特性,这些特性将改变(非)可空列的性能动态。

    • 25
  2. Peter Eisentraut
    2011-01-04T21:07:13+08:002011-01-04T21:07:13+08:00

    您应该让您的架构设计和应用程序需求来指导这个决定。在大多数情况下,性能差异可能并不明显。

    • 9

相关问题

  • 是否有任何 MySQL 基准测试工具?[关闭]

  • 我在哪里可以找到mysql慢日志?

  • 如何优化大型数据库的 mysqldump?

  • 什么时候是使用 MariaDB 而不是 MySQL 的合适时机,为什么?

  • 组如何跟踪数据库架构更改?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    您如何显示在 Oracle 数据库上执行的 SQL?

    • 2 个回答
  • Marko Smith

    如何选择每组的第一行?

    • 6 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    我可以查看在 SQL Server 数据库上运行的历史查询吗?

    • 6 个回答
  • Marko Smith

    如何在 PostgreSQL 中使用 currval() 来获取最后插入的 id?

    • 10 个回答
  • Marko Smith

    如何在 Mac OS X 上运行 psql?

    • 11 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Marko Smith

    将数组参数传递给存储过程

    • 12 个回答
  • Martin Hope
    Manuel Leduc PostgreSQL 多列唯一约束和 NULL 值 2011-12-28 01:10:21 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Stuart Blackler 什么时候应该将主键声明为非聚集的? 2011-11-11 13:31:59 +0800 CST
  • Martin Hope
    pedrosanta 使用 psql 列出数据库权限 2011-08-04 11:01:21 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST
  • Martin Hope
    BrunoLM Guid vs INT - 哪个更好作为主键? 2011-01-05 23:46:34 +0800 CST
  • Martin Hope
    bernd_k 什么时候应该使用唯一约束而不是唯一索引? 2011-01-05 02:32:27 +0800 CST
  • Martin Hope
    Patrick 如何优化大型数据库的 mysqldump? 2011-01-04 13:13:48 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve