文档章节

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

法斗斗
 法斗斗
发布于 2016/05/18 17:08
字数 973
阅读 100
收藏 7

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

 

唯一索引

唯一索引不允许两行具有相同的索引值。

如果现有数据中存在重复的键值,则大多数数据库都不允许将新创建的唯一索引与表一起保

存。当新数据将使表中的键值重复时,数据库也拒绝接受此数据。

例如,如果在employee 表中的职员姓氏(lname) 列上创建了唯一索引,则所有职员不能同姓。

主键索引

主键索引是唯一索引的特殊类型。

数据库表通常有一列或列组合,其值用来唯一标识表中的每一行。该列称为表的主键。

在数据库关系图中为表定义一个主键将自动创建主键索引,主键索引是唯一索引的特殊类型。

主键索引要求主键中的每个值是唯一的。

当在查询中使用主键索引时,它还允许快速访问数据。

 

它们的一些比较:

(1)对于主健/unique constraint ,oracle/sql server/mysql等都会自动建立唯一索引;

(2)主键不一定只包含一个字段,所以如果你在主键的其中一个字段建唯一索引还是必要的;

(3)主健可作外健,唯一索引不可;

(4)主健不可为空,唯一索引可;

(5)主健也可是多个字段的组合;

(6)主键与唯一索引不同的是:

a.有not null属性;

b.每个表只能有一个。

1、主键 主键ID,主键既是约束也是索引,同时也用于对象缓存的键值。

2、索引

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

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

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

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

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

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

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

 

本文转载自:

共有 人打赏支持
法斗斗
粉丝 21
博文 367
码字总数 17774
作品 0
杨浦
程序员
私信 提问
补12.关于mysql的索引回顾

一、mysql中的索引是什么? 索引在mysql中也叫做“键”,是mysql存储引擎用于快速找到记录的一种标记,索引对于提高查询速度起到了非常关键的作用,当表中的数据量足够大时,索引的作用愈发重...

苏浩智
2017/06/07
0
0
唯一索引(unique index)和非唯一索引(普通索引)(index) 区别

如果在一个列上同时建唯一索引和普通索引的话,mysql会自动选择唯一索引。 谷歌一下: 唯一索引和普通索引使用的结构都是B-tree,执行时间复杂度都是O(log n)。 补充下概念: 1、普通索引(非唯...

chenhao_asd
2016/11/03
0
0
SQL Server-数据库架构和对象、定义数据完整性(二)

前言 本节我们继续SQL之旅,本节我们如题来讲讲一些基本知识以及需要注意的地方,若有不妥之处,还望指出,简短的内容,深入的理解,Always to review the basics。 数据库架构和对象 数据库...

jeffcky
2016/11/26
0
0
6、MySQL字段约束介绍

6、MySQL字段约束 上一章简要介绍了关于MySQL关于多表查询的相关操作介绍,本章内容将在创建数据表的时候关于定义的相关字段进行约束操作。 一、字段字段修饰符的使用 1.1 null和not null修饰...

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

Mysql索引概念: 说说Mysql索引,看到一个很少比如:索引就好比一本书的目录,它会让你更快的找到内容,显然目录(索引)并不是越多越好,假如这本书1000页,有500也是目录,它当然效率低,目...

zhdan
2016/05/26
196
0

没有更多内容

加载失败,请刷新页面

加载更多

支付宝api实现转账到单个账号

项目后台需要实现用户提现功能,支付宝平台对应的就是“单笔转账到支付宝账户”。具体实现见代码,无套路! 肯定需要先申请支付宝商户账号相关信息。以下为个人沙箱环境实现代码,生产上只需...

貔貅叔
14分钟前
1
0
Spark自定义维护kafka的offset到zk

import kafka.common.TopicAndPartitionimport kafka.message.MessageAndMetadataimport kafka.serializer.StringDecoderimport kafka.utils.ZkUtilsimport org.I0Itec.zkclient.ZkC......

hblt-j
14分钟前
0
0
bash运行脚本的几种方式

bash shell 脚本执行的方法有多种,本文作一个总结,供大家学习参考。 假设我们编写好的shell脚本的文件名为hello.sh,文件位置在/data/shell目录中并已有执行权限。 方法一:切换到shell脚本...

吴伟祥
24分钟前
0
0
看图了解RocksDB

摘要: 它是一个高性能的Key-Value数据库。设计了完善的持久化机制,同时保证性能和安全性。能够良好的支持范围查询,因为K-V记录就是按照Key来排序的。 下图为写入的流程: 可以看到主要的三...

阿里云官方博客
33分钟前
0
0
关于Python pandas模块输出每行中间省略号问题

关于Python数据分析中pandas模块在输出的时候,每行的中间会有省略号出现,和行与行中间的省略号....问题,其他的站点(百度)中的大部分都是瞎写,根本就是复制黏贴以前的版本,你要想知道其...

上官夏洛特
34分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部