唯一索引与主键索引的比较

唯一索引与主键索引的比较

唯一索引
唯一索引不允许两行具有相同的索引值。
如果现有数据中存在重复的键值,则大多数数据库都不允许将新创建的唯一索引与表一起保存。当新数据将使表中的键值重复时,数据库也拒绝接受此数据。例如,用户表中的身份证(idcard) 列上创建了唯一索引,则所有身份证不能重复

主键索引
主键索引是唯一索引的特殊类型。
数据库表通常有一列或列组合,其值用来唯一标识表中的每一行。该列称为表的主键。
在数据库关系图中为表定义一个主键将自动创建主键索引,主键索引是唯一索引的特殊类型。主键索引要求主键中的每个值是唯一的。当在查询中使用主键索引时,它还允许快速访问数据。

比较:
1对于主健/unique constraint , oracle/sql server/mysql等都会自动建立唯一索引;
2主键不一定只包含一个字段,所以如果你在主键的其中一个字段建唯一索引还是必要的;
3主健可作外健,唯一索引不可;
4主健不可为空,唯一索引可;
5主健也可是多个字段的组合;
6主键与唯一索引不同的是:
(1).有not null属性;
(2).每个表只能有一个。

索引的注意事项
1.组合或者引用关系的子表(数据量较大的时候),需要在关联主表的列上建立非聚集索引(如订单明细表中的产品ID字段、订单明细表中关联的订单ID字段)

2.索引键的大小不能超过900个字节,当列表的大小超过900个字节或者若干列的和超过900个字节时,数据库将报错。

3.表中如果建有大量索引将会影响INSERT、UPDATE和DELETE语句的性能,因为在表中的数据更改时,所有的索引都将必须进行适当的调整。需要避免对经常更新的表进行过多的索引,并且索引应保持较窄,就是说:列要尽可能的少。

4.为经常用于查询的谓词创建索引,如用于下拉参照快速查找的code、name等。在平台现有下拉参照的查询sql语句中的like条件语句要改成不带前置通配符。还有需要关注Order By和Group By谓词的索引设计,Order By和Group By的谓词是需要排序的,某些情况下为Order By和Group By的谓词建立索引,会避免查询时的排序动作。

4.对于内容基本重复的列,比如只有1和0,禁止建立索引,因为该索引选择性极差,在特定的情况下会误导优化器做出错误的选择,导致查询速度极大下降。

5.当一个索引有多个列构成时,应注意将选择性强的列放在前面。仅仅前后次序的不同,性能上就可能出现数量级的差异。

6.对小表进行索引可能不能产生优化效果,因为查询优化器在遍历用于搜索数据的索引时,花费的时间可能比执行简单的表扫描还长,设计索引时需要考虑表的大小。记录数不大于100的表不要建立索引。频繁操作的小数量表不建议建立索引(记录数不大于5000条)

时间: 2024-08-24 00:00:32

唯一索引与主键索引的比较的相关文章

SQL存储原理及聚集索引、非聚集索引、唯一索引、主键约束的关系(补)

索引类型 1.          唯一索引:唯一索引不允许两行具有相同的索引值 2.          主键索引:为表定义一个主键将自动创建主键索引,主键索引是唯一索引的特殊类型.主键索引要求主键中的每个值是唯一的,并且不能为空 3.          聚集索引(Clustered):表中各行的物理顺序与键值的逻辑(索引)顺序相同,每个表只能有一个 4.          非聚集索引(Non-clustered):非聚集索引指定表的逻辑顺序.数据存储在一个位置,索引存储在另一个位置,索引中包含指

唯一索引 && 主键索引

唯一索引唯一索引不允许两行具有相同的索引值. 如果现有数据中存在重复的键值,则大多数数据库都不允许将新创建的唯一索引与表一起保存. 当新数据将使表中的键值重复时,数据库也拒绝接受此数据.例如,如果在 employee 表中的职员姓氏(lname) 列上创建了唯一索引,则所有职员不能同姓. 主键索引主键索引是唯一索引的特殊类型.数据库表通常有一列或列组合,其值用来唯一标识表中的每一行.该列称为表的主键.在数据库关系图中为表定义一个主键将自动创建主键索引.主键索引要求主键中的每个值是唯一的.当在查询

MySQL Index--InnoDB引擎的主键索引

无主键表 在Innodb存储引擎中,每张表都会有主键,数据按照主键顺序组织存放,该类表成为索引组织表 Index Ogranized Table 如果表定义时没有显示定义主键,则会按照以下方式选择或创建主键: a) 先判断表中是否有"非空的唯一索引",如果有 1) 如果仅有一条"非空唯一索引",则该索引为主键 2) 如果有多条"非空唯一索引",根据索引索引的先后顺序,选择第一个定义的非空唯一索引为主键. b) 如果表中无"非空唯一索引&

主键、自增主键、主键索引、唯一索引概念区别与性能区别

概念区别: 主键:指字段唯一不为空值的列. 主键索引:指的就是主键,主键没有明确的概念定义,主键既是约束,也是索引,主键是索引的一种,是唯一索引的特殊类型.创建主键的时候,数据库默认会为主键创建一个唯一索引. 自增主键:字段类型为数字.自增.并且是主键. 唯一索引:索引列的值必须唯一,但允许有空值.主键是唯一索引,这样说没错.但反火来说唯一索引也是主键就错误了,因为唯一索引允许空值,主键不允许有空值,所以不能说唯一索引也是主键. 性能区别: 通过测试,发现主键.自增主键.唯一索引的查询效率不一样

删除指定表的所有索引,包括主键索引,唯一索引和普通索引 ,适用于sql server 2005,

原文:删除指定表的所有索引,包括主键索引,唯一索引和普通索引 ,适用于sql server 2005, --删除指定表中所有索引 --用法:declare @tableName varchar(100) --set @tableName='表名' --表名 ,根据实际情况替换 --exec sp_dropindex @tableName if exists(select 1 from sysobjects where id = object_id('dropindex') and xtype =

Mysql主键索引、唯一索引、普通索引、全文索引、组合索引的区别

原文:Mysql主键索引.唯一索引.普通索引.全文索引.组合索引的区别 Mysql索引概念: 说说Mysql索引,看到一个很少比如:索引就好比一本书的目录,它会让你更快的找到内容,显然目录(索引)并不是越多越好,假如这本书1000页,有500也是目录,它当然效率低,目录是要占纸张的,而索引是要占磁盘空间的. Mysql索引主要有两种结构:B+树和hash. hash:hsah索引在mysql比较少用,他以把数据的索引以hash形式组织起来,因此当查找某一条记录的时候,速度非常快.当时因为是has

Mysql索引介绍及常见索引(主键索引、唯一索引、普通索引、全文索引、组合索引)的区别

Mysql各种索引区别:普通索引:最基本的索引,没有任何限制唯一索引:与"普通索引"类似,不同的就是:索引列的值必须唯一,但允许有空值.主键索引:它 是一种特殊的唯一索引,不允许有空值. 全文索引:仅可用于 MyISAM 表,针对较大的数据,生成全文索引很耗时好空间.组合索引:为了更多的提高mysql效率可建立组合索引,遵循”最左前缀“原则. Mysql索引概念:说说Mysql索引,看到一个很少比如:索引就好比一本书的目录,它会让你更快的找到内容,显然目录(索引)并不是越多越好,假如这

普通索引、唯一索引、主索引、外键索引、复合索引、非主码索引、聚集主码(聚集索引)、单列索引、多列索引

强烈建议看了第一个参考文献再来看这个篇博文,因为此处不准备讲底层数据结构的实现. 索引:索引(Index)是帮助MySQL高效获取数据的数据结构.提取句子主干,就可以得到索引的本质:索引是数据结构.其表达的是存储引擎的范畴,也就是说只有在存储引擎级别谈索引才有意义.MyISAM.InnoDB.Memory等.此处单纯就InnoDB存储引擎讨论. B-TREE.B+TREE数据结构. 在数据之外,数据库系统还维护着满足特定查找算 法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在这

通俗易懂 索引、单列索引、复合索引、主键、唯一索引、聚簇索引、非聚簇索引、唯一聚簇索引 的区别与联系

索引 数据库只做两件事情:存储数据.检索数据.而索引是在你存储的数据之外,额外保存一些路标(一般是B+树),以减少检索数据的时间.所以索引是主数据衍生的附加结构. 一张表可以建立任意多个索引,每个索引可以是任意多个字段的组合.索引可能会提高查询速度(如果查询时使用了索引),但一定会减慢写入速度,因为每次写入时都需要更新索引,所以索引只应该加在经常需要搜索的列上,不要加在写多读少的列上. 单列索引 与 复合索引 只包含一个字段的索引叫做单列索引,包含两个或以上字段的索引叫做复合索引(或组合索引).