【问题标题】:Is index an Constraint in SQL? [closed]索引是 SQL 中的约束吗? [关闭]
【发布时间】:2021-02-04 05:41:47
【问题描述】:

很少有文档说索引是一种约束,但是其他文档没有在约束部分中包含索引,因此索引是否是约束是值得怀疑的?

任何人都可以分享您对此的看法吗?

Constraint

【问题讨论】:

  • 很少有文档说索引是一种约束要么你理解不正确,要么这个文档有误。索引根本不是关系理论的对象。它是提高运营效率的存储对象。
  • 我同意 Akina 的观点。但是如果一个“索引”被称为一个“约束”呢?无论如何,这两个链接都不是 MySQL 官方文档的链接。 Tutorialspoint 是某人的非常简略的参考手册,在某种程度上也是教程。我浏览了其他一些页面——我对一些事情持怀疑态度,但没有看到任何危险的错误陈述。
  • w3schools 非常简洁,并试图与版本无关。我发现了 MySQL 的至少一个语法错误(在其他品牌中也可以使用。因此,请谨慎信任该网站。
  • @RickJames 我也是,但对“索引是否是一个约束”感到困惑?在查看了这些文档之后。

标签: mysql sql database indexing constraints


【解决方案1】:

MySQL 为三种类型的约束创建索引:

  • 主键约束创建唯一索引。
  • 唯一约束创建唯一索引。
  • 外键约束在引用列上创建索引。

前两个在所有数据库中都很常见。

索引是一个约束吗?并非如此,但唯一索引与对相同列的唯一约束具有相同的效果。因此,您可以将唯一索引视为实现唯一约束。也就是说,我认为用另一种方式可以更好地理解因果关系:使用唯一索引来实现唯一约束。

【讨论】:

  • a unique constraint is implemented using a unique index. 考虑到数据库引擎需要检查所有数据以确认该值是否已经存在,这是有道理的。使用索引应该可以加快这个过程。
【解决方案2】:
  1. 索引是模式对象

  2. 索引是数据库搜索引擎可以用来加速数据检索的特殊查找表。简单地说,索引是指向表中数据的指针。一个索引 该数据库非常类似于书后的索引。

  3. 索引用于比其他方式更快地从数据库中检索数据。用户看不到索引,它们只是用来加速搜索/查询。

  4. 在表列上定义 PRIMARY KEY 和 UNIQUE 约束时会自动创建索引。例如,当您创建具有 UNIQUE 约束的表时,数据库引擎会自动创建一个非聚集索引。如果配置 PRIMARY KEY,数据库引擎会自动创建聚集索引,除非聚集索引已经存在。当您尝试对现有表强制执行 PRIMARY KEY 约束并且该表上已存在聚集索引时,SQL Server 会使用非聚集索引强制执行主键。

【讨论】:

  • 另一件需要注意的事情(在 MySQL 中):PRIMARY KEYUNIQUEINDEX == KEY
  • @RickJames 主键实体由两部分组成。第一部分是约束包:UNIQUE 约束 + NOT NOLL 约束。第二部分是一个允许有效检查这些约束的索引。正式地,这些约束可以在没有索引的情况下进行检查,是吗?但是这个过程太慢了——所以索引的创建/使用是强制性的/定义的。
  • 这个答案与关于“约束”的主要​​问题没有任何联系,甚至没有提到这个词
  • 此外,PK 与数据“聚集”在一起(对于 InnoDB)。 MyISAM 不集群;其他供应商可以选择集群。
猜你喜欢
  • 2011-04-28
  • 1970-01-01
  • 1970-01-01
  • 2011-02-16
  • 2010-10-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多