惟一索引与主键索引的比较mysql
惟一索引sql
惟一索引不容许两行具备相同的索引值。数据库
若是现有数据中存在重复的键值,则大多数数据库都不容许将新建立的惟一索引与表一块儿保缓存
存。当新数据将使表中的键值重复时,数据库也拒绝接受此数据。oracle
例如,若是在employee 表中的职员姓氏(lname) 列上建立了惟一索引,则全部职员不能同姓。性能
主键索引优化
主键索引是惟一索引的特殊类型。spa
数据库表一般有一列或列组合,其值用来惟一标识表中的每一行。该列称为表的主键。设计
在数据库关系图中为表定义一个主键将自动建立主键索引,主键索引是惟一索引的特殊类型。code
主键索引要求主键中的每一个值是惟一的。
当在查询中使用主键索引时,它还容许快速访问数据。
它们的一些比较:
(1)对于主健/unique constraint ,oracle/sql server/mysql等都会自动创建惟一索引;
(2)主键不必定只包含一个字段,因此若是你在主键的其中一个字段建惟一索引仍是必要的;
(3)主健可做外健,惟一索引不可;
(4)主健不可为空,惟一索引可;
(5)主健也但是多个字段的组合;
(6)主键与惟一索引不一样的是:
a.有not null属性;
b.每一个表只能有一个。
一、主键 主键ID,主键既是约束也是索引,同时也用于对象缓存的键值。
二、索引
*组合或者引用关系的子表(数据量较大的时候),须要在关联主表的列上创建非汇集索引(如订单明细表中的产品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条)