数据库中“约束”和“索引”的区别

根据《MySQL技术内幕》中的解释:

约束更是一个逻辑的概念,用来保证数据的完整性,而索引是一个数据结构,既有逻辑上的概念,在数据库中还代表着物理存储的方式。

那么,我们需要先理解“什么是数据完整性”

数据完整性

  1. 概念:很容易理解,就如字面意思,我们需要保证我们存入的数据满足特定的要求。而如果是文件系统的话,我们一般通过程序端进行控制;但关系型数据库(MySQL数据库)本身能够保证数据完整性。
  2. 数据完整性有以下三种形式:
  • 实体完整性保证表中有一个主键。可以通过Primary Key或Unique Key约束,也可以编写一个触发器。
  • 域完整性保证数据每列的值满足特定条件。通过几种途径来保证:选择合适的数据类型;外键约束;触发器;DEAFAULT约束。
  • 参照完整性保证两张表之间的关系。通过外键或者触发器。

“索引”之于数据结构

MySQL中InnoDB引擎是通过B+树这种数据结构进行数据存取的,而“索引”就是B+树的子叶结点(非树叶)。我们说InnoDB基于B+树查找数据,也可以说基于索引查找数据。利用好索引可以大大提高查询的性能。

总结

最后,再来理解一下开头的那句话。
约束是一个逻辑概念,它更多是指一种功能,用来保证数据完整性。索引是一个数据结构,因为索引是B+树的子叶结点。当用户创建了唯一索引就创建了唯一的约束,我们创建了索引这个数据结构,起到了唯一约束的这个功能从而保证了数据完整性。

以上是我看书时个人观点的总结,仅供参考

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容