Mysql的主键和索引
关系数据可依赖于主键,主键在物理层面上主要有两个用途:
- 唯一的标识一行
因为主键可以唯一标识一行记录,所以可以确保执行数据更新、删除的时候不会出现张冠李戴的错误。 - 作为一个可以被外键引用的对象
一个表的主键通常可以作为另一个表的外键,主键通过与外键构成参照完成性约束,防止出现数据不一致。
主键分为单列主键和复合主键:
- 单一主键:只用一列来唯一标识一行
create table user(id varchar(4) primary key, # 单列主键name varchar(4) not null, email varchar(20) not null ,efftflag varchar(1) not null )
- 联合主键:当使用一列不能唯一表示一行的时候,就要采用多列唯一标识一行,就是复合主键
create table uesr(id varchar(4) not null, name varchar(6) not null,email varchar(3) not null, efftflag varchar(1) not null, primary key(id ,name ) # 复合主键 )
索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针。
索引可以提高查询速度,它就相当于字典的目录,通过它可以很快查询到结果,而不需要进行全表扫描。但过多使用索引会降低更新表的速度,如对表进行INSERT, UPDATE和DELETE时,Msql不仅要保存数据,还要保存索引文件。
索引可分为单列索引和复合索引:
- 单列索引:只有某一列作为索引,默认为index索引,这一列可以包含重复数据。如果某列不存在重复数据,最好设置成唯一索引unique形式,它比index的索引速度更快。
- 复合索引:每次检索都需要使用多列进行时,可以把多列设为复合索引。根据多列是否唯一,也分为index索引和unique索引。
【注意】对于复合索引:Mysql是从左到右使用索引中的字段,一个查询可以只是用索引的一部分,但必须是左侧部分。如索引是indexName(a,b,c),则可以支持a|a,b|a,b,c3种组合进行查找。
总体来说:主键相当于一本书的页码,索引相当于书的目录。
两者的比较:
- 主键是一定是唯一性索引,但唯一性索引不一定是主键
数据库管理系统对于主键自动生成唯一索引,所以主键是一个特殊的索引 - 唯一索引标识索引值唯一,一个表可以有多个唯一索引,但主键只能有一个
- 主键列不能为空,但唯一索引列可以为空
- 一张表只能有一个主键,但可以有多个索引
参考博客:https://blog.csdn.net/qq_38724327/article/details/79880636
Mysql的主键和索引相关推荐
- 浅谈mysql的主键和索引
在上一篇文章<count(1).count(*).count(字段)哪个更靠谱>中,我们提到过主键是优化不了count的查询效率的,需要建索引才可以,那么,是不是意味着主键的效率还不如一般 ...
- MySQL的主键,索引设置和添加
PRI primary key 表示主键,唯一 写法: id bigint(20) unsigned primary key not null ,uni UNIQUE 表示唯一 写法 id bigin ...
- mysql联合主键是不是索引_MySQL:联合主键、索引
MySQL数据库用联合主键.用两张表测试. # 1分钟数据表 CREATE TABLE md_1min2( `d_1min` DATETIME(3), `code` CHAR(16), `open` ...
- oracle 主键能加索引吗,Oracle 添加主键和索引
数据的主键和索引一般情况下都是必须的,特别是表有大量数据的时候,索引和主键更是必不可少,这样可以提供数据的查询效率: 一.创建表的同时创建主键约束 (1)无命名 create table studen ...
- Oracle与Mysql主键、索引及分页的区别小结
Oracle与Mysql主键.索引及分页的区别,学习oracle的朋友可以参考下 区别: 1.主键,Oracle不可以实现自增,mysql可以实现自增. oracle新建序列,SEQ_USER_Id. ...
- Mysql中主键和外键和索引
Mysql中主键和外键和索引 1.主键和外键是什么 学生表(学号,姓名,性别,班级) 其中每个学生的学号是唯一的,学号就是一个主键 课程表(课程编号,课程名,学分) 其中课程编号是唯一的,课程编号就是 ...
- MySQL 主键和索引
主键:关系数据可依赖于主键,主键在物理层面上主要有两个用途: 唯一的标识一行 因为主键可以唯一标识一行记录,所以可以确保执行数据更新.删除的时候不会出现张冠李戴的错误. 作为一个可以被外键引用的对象 ...
- mysql中主键、普通索引、唯一索引和全文索引
SQL索引用来快速地寻找那些具有特定值的记录,所有MySQL索引都以B-树的形式保存.如果没有索引,执行查询时MySQL必须从第一个记录 开始扫描整个表的所有记录,直至找到符合要求的记录.表里面的记录 ...
- MySQL主键与索引的联系和区别
关系数据库依赖于主键,它是数据库物理模式的基石.主键在物理层上只有两个前途: 唯一地标识一行 作为一个可以被外键有效引用的对象 索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分) ...
最新文章
- OD基本快捷键及功能
- php catch e是什么,php try catch 中的catch(Exception $e) 中的Exception 有什么作用?
- [error] MFC错误不能将参数1从const char [3]转换为const wchar_t *
- Linux系统7z文件解压
- python的代码在哪写_python代码在哪里编写
- Eclipse最常用快捷键
- Linux的使用和认识实验,通过一个小实验认识Linux vDSO
- Hibernate实体JSONObject化时遇到的问题
- 大型互联网分布式企业微服务云架构
- 修复ext4日志(jbd2)bug( Ext4 文件系统有以下 Bug)
- DxO FilmPack 5详细教程:对照片进行艺术渲染,使其具有专业电影的色彩和颗粒感
- Java反射之修改常量值
- 产品经理面试问题及答案大全《一》
- Java坦克大战代码
- 平衡车gazebo仿真
- 用户体验--NPS满意度指标
- 正则表达式(18)——字符串替换案例:UBB翻译
- 爱快路由游戏私服全开
- 一个开源vue网站博客,nuxt开源网站,前后端分离项目 1
- 安装一个apk引起的无法开机。