唯一索引
唯一索引不允许两行具有相同的索引值。
如果现有数据中存在重复的键值,则大多数数据库都不允许将新创建的唯一索引与表一起保存。当新数据将使表中的键值重复时,数据库也拒绝接受此数据。例如,用户表中的身份证(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条)
相关推荐
1、 主键是一种约束,唯一索引是一种索引,两者在本质上是不同的。 2、 主键创建后一定包含一个唯一性索引,唯一性索引并不一定就是主键。 3、 唯一性索引列允许空值,而主键列不允许为空值。 4、 主键列在创建时...
主键一定是唯一性索引,唯一性索引并不一定就是主键。 所谓主键就是能够唯一标识表中某一行的属性或属性组,一个表只能有一个主键,但可以有多个候选索引。因为主键可以唯一标识某一行记录,所以可以确保执行数据...
goldengate同步无主键无唯一索引表的问题以及解决方案.docx
数据库,索引,主键,约束,sql的相关自学学习资料,比较乱,但都是个人心得,值得看看
主键索引,简称主键,原文是PRIMARY KEY,由一个或多个列组成,用于唯一性标识数据表中的某一条记录。一个表可以没有主键,但最多只能有一个主键,并且主键值不能包含NULL。 在MySQL中,InnoDB数据表的主键设计我们...
创建学员信息表--创建唯一索引--修改学员信息表添加主键和检查约束
一、 创建主键(主键=主键索引=聚集索引) 主键是什么? 答:拿主键可以唯一确定一条数据,它和物理存储排序一致,不能为空,一个表只能有一个。 原本没有创建的主键的表在磁盘上存储为: Id=0;username=username0;sex...
聚簇索引与主键的选择一、什么是聚簇索引?二、什么是非聚簇索引?1. InnoDB引擎中2. MyISAM引擎中三、聚簇索引的优劣与主键选择的关系 一、什么是聚簇索引? 首先,聚簇索引不是一种单独的索引类型,其实是数据的...
总结,对于主键与唯一索引约束: • 执行insert和update时,会触发约束检查 • InnoDB违反约束时,会回滚对应SQL • MyISAM违反约束时,会中断对应的SQL,可能造成不符合预期的结果集 • 可以使用 insert … on ...
OracleGoldenGate针对表没有主键或唯一索引的解决方案[归类].pdf
如何在oracle中查询所有用户表的表名、主键名称、索引、外键等
主键是数据库表中用于唯一标识每一行数据的列或一组列。主键的值不能重复,也不能为空。每个表只能有一个主键,主键的作用主要有以下几点: - 唯一标识每一行数据,确保数据的唯一性; - 作为其他表的外键引用,...
sql学习 主外键设计其他_普通索引改主键.sql
mysql主键和唯一索引的区别(csdn)————程序
另附以下功能 * 生成目录树 * 生成迁移脚本 * 查找所有System.out,.err * 批量替换多关键字 详情见 http://blog.csdn.net/amosryan/article/details/6684465
CREATE INDEX 语句并不能创建主键索引。 创建索引 CREATE [UNIQUE | FULLTEXT] INDEX 索引名 ON 表名(列名[(长度)] [ASC | DESC],...) 说明: 索引名:索引的名称,索引名在一个表中名称必须是唯一的。 列名:表示...
goldengate同步无主键无唯一索引表的问题以及解决方案-更新关于附加日志.docx
身份证号比较大,不建议设置为主键 从性能角度出发,选择普通索引还是唯一索引? 假设字段k上的值都不重复 查询过程 1、查询语句:SELECT id FROM T WHERE k=5 2、查询过程 通过B+树从树根开始,按层搜索到...
删除数据库的所有表、存储过程、主键、外键、索引等 .sql