唯一索引
唯一索引不允许两行具有相同的索引值。
如果现有数据中存在重复的键值,则大多数数据库都不允许将新创建的唯一索引与表一起保存。当新数据将使表中的键值重复时,数据库也拒绝接受此数据。例如,如果在 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条)

扩展阅读:

http://topic.csdn.net/t/20041108/15/3532352.html

转载于:https://www.cnblogs.com/ymj0906/p/4240856.html

唯一索引与主键索引的比较相关推荐

  1. 数据库索引——唯一索引、主键索引、聚集索引

    索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息. 索引的一个主要目的就是加快检索表中数据,亦即能协助信息搜索者尽快的找到符合限制条件的记录ID的辅助数据结构 ...

  2. Mysql唯一索引、主键索引、联合索引

    数据库索引都有哪些类型 普通索引 --加速查找 没有任何限制 主键索引 --加速查找+不能为空+不能重复 一般建表同时完成创建 一个表只能有一个主键 不允许控制 唯一索引 --加速查找+不能重复 索引 ...

  3. MySql 唯一索引和主键索引

    唯一索引和主键索引区别: 一个表只能有一个主键索引,但是可以有多个唯一索引 主键索引一定是唯一索引,唯一索引则不一定是主键索引 主键索引可以与外键构成完整性约束,唯一索引不可以 唯一性索引列允许空值, ...

  4. mysql主键索引_MySQL索引之主键索引

    在MySQL里,主键索引和辅助索引分别是什么意思,有什么区别? 上次的分享我们介绍了聚集索引和非聚集索引的区别,本次我们继续介绍主键索引和辅助索引的区别. 1.主键索引 主键索引,简称主键,原文是PR ...

  5. MySQL中的索引(主键索引)

    MySQL中的索引(主键索引篇) 主键索引是一种特殊的唯一索引,一个表只能有一个主键,不允许有空值.一般是在建表的时候同时添加主键索引: 一.如何添加主键索引 修改表添加主键索引 Alter tab ...

  6. 【实施工程师之家】——mysql四种索引PRIMARY(主键索引)、INDEX(一般索引)、UNIQUE(非空索引)、FULLTEXT(全文索引)应用

    mysql四种索引PRIMARY(主键索引).INDEX(一般索引).UNIQUE(非空索引).FULLTEXT(全文索引)应用 目录 1)PRIMARY: 2)NORMAL: 3)UNIQUE: 4 ...

  7. MySQL索引之主键索引

    导读 在MySQL里,主键索引和辅助索引分别是什么意思,有什么区别? 上次的分享我们介绍了聚集索引和非聚集索引的区别,本次我们继续介绍主键索引和辅助索引的区别. 1.主键索引 主键索引,简称主键,原文 ...

  8. mysql 主键 聚集索引_MySQL主键索引和聚焦索引

    主键索引 主键索引,简称主键,原文是PRIMARY KEY,由一个或多个列组成,用于唯一性标识数据表中的某一条记录.一个表可以没有主键,但最多只能有一个主键,并且主键值不能包含NULL. 在MySQL ...

  9. mysql 主索引跟辅助索引_MySQL_MySQL索引之主键索引,在MySQL里,主键索引和辅助索 - phpStudy...

    MySQL索引之主键索引 在MySQL里,主键索引和辅助索引分别是什么意思,有什么区别? 上次的分享我们介绍了聚集索引和非聚集索引的区别,本次我们继续介绍主键索引和辅助索引的区别. 1.主键索引 主键 ...

最新文章

  1. 基本数据结构(图: 基本结构,DFS,prim算法, kruskal算法)
  2. TCP 三次握手 / 四次挥手
  3. linux vbox 添加串口,如何在VirtualBox中直接使用本机物理串口
  4. 《Python CookBook2》 第一章 文本 - 检查字符串中是否包含某字符集合中的字符 简化字符串的translate方法的使用...
  5. 华为鸿蒙车联网,华为鸿蒙上车 关于车联网的想象有多少?
  6. 得推分类信息 v4.0 强大且好用的网站信息编辑管理工具
  7. 4、Cocos2dx 3.0游戏开发找小三之Hello World 分析
  8. 快速突破面试算法之图篇
  9. ESXI洗白安装黑群晖教程,附文件
  10. win7系统补丁安装流程
  11. SiamRPN 论文理解
  12. 5.MySQL高级语句,你给我学!
  13. CUDA 编程 __launch_bounds__的应用方法
  14. 解决Shiro+SpringBoot异步任务长时间运行导致的UnknownSessionException错误问题
  15. 你知道怎么给客户朋友圈点赞吗?
  16. Windows管理用户账号
  17. JavaScript焦点处理(获取焦点focus()、失去焦点blur())
  18. 拍案惊奇——软件调试实战训练营
  19. spleeter音乐人声分离、5种架子鼓钢琴声音分离的高质量模型运行超详细教程windows+ubuntu18.04
  20. 【编写自己的RTOS】搞定任务调度

热门文章

  1. 1+X web中级 Laravel学习笔记——视图和模型
  2. 三十、PHP框架Laravel学习笔记——模型的预加载
  3. 使用Node 操作MySQL数据库
  4. python 对象引用、可变性 和 垃圾回收
  5. LeetCode LCP 34. 二叉树染色(树上DP)
  6. LeetCode 1814. 统计一个数组中好对子的数目(哈希)
  7. LeetCode 755. 倒水(模拟)
  8. LeetCode MySQL 1107. 每日新用户统计
  9. LeetCode 第 30 场双周赛(477/2545,前18.7%,第2次全部通过)
  10. LeetCode 629. K个逆序对数组(DP)