MySQL 约束与索引

约束

索引问答
primary key
unique key
MySQL操作
外键

MYSQL不支持非主键的聚集索引。

PRIMARY KEY 不可空不可重复,在一个表里可以定义联合主键;
primary key = unique + not null
PRIMARY KEY是一个唯一KEY,此时,所有的关键字列必须定义为NOT NULL。如果这些列没有被明确地定义为NOT NULL,MySQL应隐含地定义这些列。一个表只有一个PRIMARY KEY。如果您没有PRIMARY KEY并且一个应用程序要求在表中使用PRIMARY KEY,则MySQL返回第一个UNIQUE索引,此索引没有作为PRIMARY KEY的NULL列。

KEY通常是INDEX同义词。如果关键字属性PRIMARY KEY在列定义中已给定,则PRIMARY KEY也可以只指定为KEY。这么做的目的是与其它数据库系统兼容


desc tablename;
看到Key那一栏,可能会有4种值,即’啥也没有’,’PRI’,’UNI’,’MUL’
1. 如果Key是空的, 那么该列值的可以重复, 表示该列没有索引, 或者是一个非唯一的复合索引的非前导列
2. 如果Key是PRI, 那么该列是主键的组成部分
3. 如果Key是UNI, 那么该列是一个唯一值索引的第一列(前导列),并别不能含有空值(NULL)
4. 如果Key是MUL, 那么该列的值可以重复, 该列是一个非唯一索引的前导列(第一列)或者是一个唯一性索引的组成部分但是可以含有空值NULL

如果对于一个列的定义,同时满足上述4种情况的多种,比如一个列既是PRI,又是UNI
那么”desc 表名”的时候,显示的Key值按照优先级来显示 PRI->UNI->MUL 那么此时,显示PRI

一个唯一性索引列可以显示为PRI,并且该列不能含有空值,同时该表没有主键

一个唯一性索引列可以显示为MUL, 如果多列构成了一个唯一性复合索引
因为虽然索引的多列组合是唯一的,比如ID+NAME是唯一的,但是没一个单独的列依然可以有重复的值
只要ID+NAME是唯一的即可


因此什么是聚集索引、什么是非聚集索引?

聚集索引和非聚集索引的根本区别是表记录的排列顺序和与索引的排列顺序是否一致,聚集索引表记录的排列顺序与索引的排列顺序一致,优点是查询速度快,因为一旦具有第一个索引值的纪录被找到,具有连续索引值的记录也一定物理的紧跟其后。

聚集索引的缺点是对表进行修改速度较慢,这是为了保持表中的记录的物理顺序与索引的顺序一致,而把记录插入到数据页的相应位置,必须在数据页中进行数据重排,降低了执行速度。建议使用聚集索引的场合为:
  a.此列包含有限数目的不同值;
  b.查询的结果返回一个区间的值;
  c.查询的结果返回某值相同的大量结果集。

非聚集索引指定了表中记录的逻辑顺序,但记录的物理顺序和索引的顺序不一致,聚集索引和非聚集索引都采用了B+树的结构,但非聚集索引的叶子层并不与实际的数据页相重叠,而采用叶子层包含一个指向表中的记录在数据页中的指针的方式。非聚集索引比聚集索引层次多,添加记录不会引起数据顺序的重组。建议使用非聚集索引的场合为:
  a.此列包含了大量数目不同的值;
  b.查询的结束返回的是少量的结果集;
  c.order by 子句中使用了该列。

--不用索引查询
Select * FROM IndexTestTable WHIT(INDEX(0))
Where Status='B'

--创建聚集索引
Create CLUSTERED INDEX icIndexTestTable
ON IndexTestTable(Status)

--使用索引查询
Select * FROM IndexTestTable WITH(INDEX(icIndexTestTable))
Where Status='B' 

聚集索引确定表中数据的物理顺序。聚集索引类似于电话簿,按姓氏排列数据。由于聚集索引规定数据在表中的物理存储顺序,因此一个表只能包含一个聚集索引。但该索引可以包含多个列(组合索引),就像电话簿按姓氏和名字进行组织一样

非聚集索引与课本中的索引类似。数据存储在一个地方,索引存储在另一个地方,索引带有指针指向数据的存储位置。索引中的项目按索引键值的顺序存储,而表中的信息按另一种顺序存储(这可以由聚集索引规定)。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL中的约束索引是用于确保数据完整性和提高查询性能的两个不同的概念。 1. 约束(Constraints): 约束是用于强制实施特定规则或限制数据的条件。它们定义了对表中数据的有效性和一致性要求。常见的约束类型包括主键、唯一键、外键和检查约束。 - 主键(Primary Key):用于唯一标识表中的每一行数据,确保每行都具有唯一的标识符。 - 唯一键(Unique Key):确保组合中的值唯一,但可以包含空值。 - 外键(Foreign Key):用于建立表之间的关系,确保引用其他表中存在的正确数据。 - 检查约束(Check Constraint):定义了对中值的限制条件,只允许满足条件的值插入或更新。 2. 索引(Indexes): 索引是用于提高查询性能的数据结构。它们是按特定组合创建的,以加快对表中数据的访问速度。索引可以使查询更快,但会增加插入、更新和删除操作的开销。 - B-Tree索引:最常见的索引类型,适用于等值查询、范围查询和排序操作。 - 唯一索引:类似于唯一键,确保组合中的值唯一。 - 全文索引:适用于在文本数据中进行全文搜索。 - 空间索引:适用于处理空间数据类型(如地理位置)。 需要注意的是,索引是通过占用额外的存储空间来提高查询性能的,而约束是用于强制实施数据完整性的。因此,在设计数据库时需要根据具体需求和考虑权衡来选择适当的约束索引

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值