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

概念区别:

主键:指字段唯一不为空值的列。

主键索引:指的就是主键,主键没有明确的概念定义,主键既是约束,也是索引,主键是索引的一种,是唯一索引的特殊类型。创建主键的时候,数据库默认会为主键创建一个唯一索引。

自增主键:字段类型为数字、自增、并且是主键。

唯一索引:索引列的值必须唯一,但允许有空值。主键是唯一索引,这样说没错。但反火来说唯一索引也是主键就错误了,因为唯一索引允许空值,主键不允许有空值,所以不能说唯一索引也是主键。

性能区别:

通过测试,发现主键、自增主键、唯一索引的查询效率不一样,当然这个差距很小,总结为:

查询:唯一索引 > 自增主键 > 主键(主键索引)

插入:主键
> 自增主键 >
唯一索引

测试场景:

创建3个表,名字段相同:id,name,money,tradDate

各插入100W条相同的数据

table A:id为主键,table B:id自增并且是主键,tableC:id创建唯一索引

查询:

性能:唯一索引 >自增主键> 主键(主键索引)

A表(主键):0.06s

B表(自增主键):0.01s,

C表(唯一索引):0.00s

插入:

10W条数据,批量插入,性能:主键
>自增主键
> 唯一索引 

A表(主键):38.408s

B表(自增主键):38.708s,

C表(唯一索引):39.018s

写了这么多,忽然感觉做这个测试没有什么意义,有木有?

时间: 2024-12-25 04:47:13

主键、自增主键、主键索引、唯一索引概念区别与性能区别的相关文章

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

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

唯一索引 && 主键索引

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

MySQL外键+唯一索引

MySQL外键+唯一索引 2019-08-22 1.外键 是指一个表里的列与另一张表里的列进行关系连接,可用于使用简单的数字或字母替代复杂的数据结构,不仅可以节省空间,也拥有约束功能,可减少书写出错的机会. 1.1使用方式 constraint 变量名 foreign key (列名) references 表名2(列名2): 其中变量名是自己给定的,约定不可以有重复: 列名即需要连接外键的列: 表名2值指的是外键的表: 列名2是和表中连接对应的列: 1.2实例 例如下面两个表,表1是机器状态表

hao947 : Mybatis resultMap配置插入和主键自增返回 : 好947

映射配置文件  好947  <!-- type:映射实体类的数据类型 id:resultMap的唯一标识 -->  <resultMap type="person" id="BaseResultMap">   <!-- column:库表的字段名 property:实体类里的属性名 -->   <id column="person_id" property="personId" /&g

SQL 主键 自动编号 主键自增

1.新建一数据表,里面有字段id,将id设为为主键 代码如下: create table tb(id int,constraint pkid primary key (id)) create table tb(id int primary key ) 2.新建一数据表,里面有字段id,将id设为主键且自动编号 代码如下: create table tb(id int identity(1,1),constraint pkid primary key (id)) create table tb(i

Hsqldb中设置主键,并让主键自增

CREATE TABLE userinfo ( Id INTEGER GENERATED BY DEFAULT AS IDENTITY, Name varchar(100) NOT NULL, Department varchar(100) NOT NULL, Status varchar(100) DEFAULT NULL, Email varchar(200) NOT NULL, PRIMARY KEY (Id)) Hsqldb中设置主键,并让主键自增,布布扣,bubuko.com

oracle主键自增(1) 序列+触发器实现Oracle主键自增

序列+触发器实现Oracle主键自增 序列的语法格式为: CREATE SEQUENCE 序列名 [INCREMENT BY n] [START WITH n] [{MAXVALUE/MINVALUE n|NOMAXVALUE}] [{CYCLE|NOCYCLE}] [{CACHE n|NOCACHE}]; INCREMENT BY 用于定义序列的步长,如果省略,则默认为1,如果出现负值,则代表序列的值是按照此步长递减的. START WITH 定义Oracle序列的初始值(即产生的第一个值),

使用powerdesigner建模时设置主键自增的问题

研究了一下,其实只要双击表,选择columns,再双击在你所要设为自增型的键上(比如你的id)或者右键选择Properties,弹出一个ColumnProperties 对话框,我们看到有标识 identify,勾选即可. Columns 的UI上有一个漏斗型 的图标 Customize columns and filters 点击以后选择你要的列,里面有:default 和identity 选中后,以后表格能只需要打勾就行了. 在CDM中是不能设置主键自增属性的,只有在PDM中才能设置. 因为

oracle 触发器实现主键自增

drop table book; --创建表 create table book( bookId varchar2(4) primary key, name varchar2(20) ); --创建序列 create sequence book_seq start with 1 increment by 1; --创建触发器 create or replace trigger book_trigger before insert on book for each row begin select