约束和索引的区别

Constraint

约束被 DB2 Universal Database(DB2 UDB) 用来对数据业务规则和数据完整性进行实施、维护。约束的作用范围仅限在当前数据库,通过检索‘数据库目录’和‘命令方式’(select * from user_constraints)可以查看到约束信息。如果想方便、快捷的访问约束信息,Control Center也是种方式。约束可以被当做数据库对象来处理,它们具有名称和关联模式(creator ID)。

约束的五种类型: 
一、主键约束(primary key constraint) 
主键创建时默认会自生成约束,也可通过显示声明。 
alter table stuInfo add constraint PK_stuNo primary key (stuNo) 
/* 主键可以是一列或多列的组合用以唯一标识表中某行数据。*/

二、外键约束(foreign key constraint) 
外键创建时默认会自生成约束,也可通过显示声明。 
alter table stuMarks add constraint FK_stuNo foreign key(stuNo) references stuinfo(stuNo) 
/* 主表stuInfo 从表stuMarks */

三、检查约束(check constraint) 
alter table stuInfo add constraint CK_stuAge check (stuAge between 15 and 40) 
/* 年龄限制在15-40岁之间 */

四、唯一约束(unique constraint) 
alter table stuInfo add constraint UQ_stuID unique(stuID) 
/* 身份证号唯一 */

五、默认约束(default constraint) 
alter table stuInfo add constraint DF_stuAddress default (‘地址不详’) for stuAddress 
/* 地址信息不填,默认为地址信息不详 */

六、信息约束(informational constraint) 
/* 不是由DB2管理器来负责实施SQL 编译器可用它来提高查询性能 */


Index

索引是一个单独和物理地并存储在数据页上的数据库结构,它是表中一列或若干列值的集合和相应的指向表中数据值的物理标识数据页的逻辑指针清单。索引的存在会增加数据库的存储空间,也会使插入、修改数据的时间开销变多(因为索引也要随之变动)。注:索引可常驻内存进行处理

在这些列上创建索引: 
在经常需要搜索的列上,可以加快搜索速度;在主键列上,强制该列的唯一性和组织表中数据的排列结构;在经常用在连接的列上,这些列主要是一些外键,可以加快连接速度;在经常需要根据范围进行搜索的列上创建索引,因为索引已经排序,其指定的范围是连续的;在经常需要排序的列上创建索引,因为索引已经排序,这样查询可以利用索引的排序;在经常使用where子句中的列上面创建索引,加快条件的判断速度。

不应该创建索引的列: 
对于在查询中很少使用和参考的列不应该创建索引。增加索引会降低系统的维护速度和增大空间需求;对于数据值很少的列也不应增加索引。由于这些列的取值很少,例如:人事表的性别列,在查询结果中,结果集的数据行占了表中数据行的很大比例,在表中搜索的数据行的比例很大,索引不能明显加快检索速度;对于定义为text, image和bit数据类型的列不应该增加索引。因为这些列的数据量要么相当大,要么很少;当修改性能远远大于检索性能时,不应该创建索引。修改性能和检索性能是互相矛盾 的。索引会提高检索性能,但是会降低修改性能。

索引的分类–按结构分 
索引按照结构可以分为有序索引(ordered index)和散列索引(hash index)两种基本类型。其中有序索引是基于值的顺序排序,根据值的排序进行索引值的查找。而散列索引则是基于将值平均分布到若干散列桶(hash bucket)。根据散列函数确定索引值所在的散列桶。 
一、有序索引:稠密索引、稀疏索引、多级索引和B+树索引。 
二、散列索引:静态散列、散列桶、散列函数、桶溢出和动态散。

索引的分类–按功能分 
一、唯一索引(unique index)和非唯一索引(nonunique index) 
create unique index indexname on table tabname(colname) 
/* 允许值为空,但不允许存在的值重复 */

二、主键索引(primary index) 
/* 唯一索引+非空约束=主索引,主键创建时会默认自生成索引 */

三、集群索引(clustered index)和非集群索引(nonclustered index) 
create index indexname on table tabname(colname desc) cluster 
/* desc降序排列,在没有注明情况下默认是按asc升序排列 */

集群索引是按物理结构排序的,它会对表中的数据进行重新排序,所以表中只能有一个该索引。数据库管理器会尝试按照相应键在索引页面中的顺序来保存数据到页面中。如果对表进行了重组,那么会按照索引键的顺序将数据插入数据页面中,数据库管理器不会维护数据的任何顺序。

集群索引具有查询优势和插入上的疲软。由于需要保持索引值和数据行的物理顺序一致,插入数据时会进行大量迁移,为防止此种情况出现,我们允许聚簇索引存在无序状态,当聚簇率低于85%时就得进行重组

DB2集群索引的叶结点和非集群索引一样,都是指向相应数据页的逻辑指针。即索引数据页和常规数据页是严格分开的。但是包括Oracle,SQL Server在内的大部分数据库的聚簇索引的页结点不是指向数据页的指针,而是叶结点本身就是数据页。

时间: 2024-12-29 07:17:17

约束和索引的区别的相关文章

mysql约束与索引的区别

摘自:https://www.cnblogs.com/YLQBL/p/8473248.html 一:约束 作用:是为了保证数据的完整性而实现的摘自一套机制,它具体的根据各个不同的数据库的实现而有不同的工具(约束): 这里主要讲解mysql的约束: 1.非空约束:not null; 指示某列不能存储 NULL 值 2.唯一约束:unique();uk unique约束的字段,要求必须是唯一的,但null除外: 3.主键约束:primary key();pk 主键约束=not  null + uni

MYSQL中唯一约束和唯一索引的区别

1.唯一约束和唯一索引,都可以实现列数据的唯一,列值可以有null.2.创建唯一约束,会自动创建一个同名的唯一索引,该索引不能单独删除,删除约束会自动删除索引.唯一约束是通过唯一索引来实现数据的唯一.3.创建一个唯一索引,这个索引就是独立,可以单独删除.4.如果一个列上想有约束和索引,且两者可以单独的删除.可以先建唯一索引,再建同名的唯一约束.5.如果表的一个字段,要作为另外一个表的外键,这个字段必须有唯一约束(或是主键),如果只是有唯一索引,就会报错. 约束是业务检查,比方说非空约束,chec

09. 约束与索引的联系

原文:09. 约束与索引的联系 之所以把约束和索引放到一起来看,主要是因为主键约束和唯一键约束,它们会自动创建一个对应的索引,先分别看下数据库中的几个约束. 一 约束 在关系型数据库里,通常有5种约束,示例如下: use tempdb go create table s ( sid varchar(20), sname varchar(20), ssex varchar(2) check(ssex='男' or ssex='女') default '男', sage int check(sage

oracle唯一索引与普通索引的区别和联系以及using index用法

oracle唯一索引与普通索引的区别和联系 区别:唯一索引unique index和一般索引normal index最大的差异是在索引列上增加一层唯一约束.添加唯一索引的数据列可以为空,但是只要尊在数据值,就必须是唯一的. 联系:1)unique index就是额外添加唯一性的约束.该约束严格的保证索引列的取值是唯一的,这在一些数据列上的业务约束是很重要的功能.比如一个数据列,不能作为主键,而且允许为空,但是业务上要求唯一特性,这个时候用唯一性索引就是最好的旋转.2)性能上两者并无很大区别. u

聚集索引和非聚集索引的区别有哪些

SQL SERVER提供了两种索引:聚集索引和非聚集索引.其中聚集索引表示表中存储的数据按照索引的顺序存储,检索效率比非聚集索引高,但对数据更新影响较大.非聚集索引表示数据存储在一个地方,索引存储在另一个地方,索引带有指针指向数据的存储位置,非聚集索引检索效率比聚集索引低,但对数据更新影响较小. 方法/步骤 1  聚集索引:该索引中键值的逻辑顺序决定了表中相应行的物理顺序.      聚集索引确定表中数据的物理顺序.聚集索引类似于电话簿,后者按姓氏排列数据.由于聚集索引规定数据在表中的物理存储顺

主键、唯一键与唯一索引的区别

一般,我们看到术语“索引”和“键”交换使用,但实际上这两个是不同的.索引是存储在数据库中的一个物理结构,键纯粹是一个逻辑概念.键代表创建来实施业务规则的完整性约束.索引和键的混淆通常是由于数据库使用索引来实施完整性约束. 接下来我们看看数据库中的主键约束.唯一键约束和唯一索引的区别. SQL> select * from v$version; BANNER ----------------------------------------------------------------------

你能说出SQL聚集索引和非聚集索引的区别吗?

最近突然想起前一阵和一朋友的聊天,当时他问我的问题是一个非常普通的问题:说说SQL聚集索引和非聚集索引的区别. AD:WOT2015 互联网运维与开发者大会 热销抢票 其实对于非专业的数据库操作人员来讲,例如软件开发人员,在很大程度上都搞不清楚数据库索引的一些基本知识,有些是知其一不知其二,或者是知其然不知其所以然.造成这种情况的主要原因我觉的是行业原因,有很多公司都有自己的DBA团队,他们会帮助你优化SQL,开发人员即使不懂优化问题也不大,所以开发人员对这方面也就不会下太多功夫去了解SQL优化

SQL聚集索引和非聚集索引的区别

其实对于非专业的数据库操作人员来讲,例如软件开发人员,在很大程度上都搞不清楚数据库索引的一些基本知识,有些是知其一不知其二,或者是知其然不知其所以然.造成这种情况的主要原因我觉的是行业原因,有很多公司都有自己的DBA团队,他们会帮助你优化SQL,开发人员即使不懂优化问题也不大,所以开发人员对这方面也就不会下太多功夫去了解SQL优化,但如果公司没有这样的DBA呢,就只能靠程序员自己了. 最近突然想起前一阵和一朋友的聊天,当时他问我的问题是一个非常普通的问题:说说SQL聚集索引和非聚集索引的区别.

聚集索引和非聚集索引的区别有哪些(转)

转载链接:http://www.qeefee.com/article/ws00000543 聚集索引:该索引中键值的逻辑顺序决定了表中相应行的物理顺序. 聚集索引确定表中数据的物理顺序.聚集索引类似于电话簿,后者按姓氏排列数据.由于聚集索引规定数据在表中的物理存储顺序,因此一个表只能包含一个聚集索引.但该索引可以包含多个列(组合索引),就像电话簿按姓氏和名字进行组织一样. 聚集索引使用注意事项 定义聚集索引键时使用的列越少越好.      • 包含大量非重复值的列.      • 使用下列运算符