【数据库】聊聊普通索引和唯一索引怎么选

业务场景

在实际的业务中,一般都有用户信息表,而存储的数据包括(姓名、手机号、身份证号),对于业务层面来说一个人的身份证号是唯一确定的,所以在创建表的时候,针对身份证号列就可以选择创建普通索引或唯一索引。那么两者之间有什么区别?
在这里插入图片描述
不管是对于普通索引还是唯一索引,其实都是在索引树上的操作。一个是查询过程,另一个是更新过程。

查询过程

如果查询的语句是 select * from user where id_card = ‘11121212’, 普通索引和唯一索引的区别
在这里插入图片描述
其实就是是否会继续查询,因为对于INNODB来说数据是以页为单位存储的,所以当读入数据的时候根据局部性原理,相邻的数据也会加载。所以查询来说性能微乎其微,最多就是多几次指针查找和判断的处理。

更新过程

在说更新过程其实就需要介绍下change buffer的机制,一般来说 如果更新的数据页在内存中,那么直接就更新,如果不在内存中,为提升性能会先将数据更新到change buffer中,然后异步刷盘。(主要是查询、定期、shutdown 三个时机)。
在这里插入图片描述
接着说唯一索引,因为唯一索引具备唯一性,需要判断是否违反唯一性约束,所以需要将数据页读入内存,然后在判断,所以唯一索引没有办法使用change buffer来提升性能。

更新的目标页在内存中

  • 对于唯一索引来说,会判断是否有冲突,没有冲突,直接执行。
  • 普通索引,直接插入数据。

更新的目标页不在内存中

  • 唯一索引,需要将数据页加载到内存中,然后判断没有冲突,插入这个值。
  • 普通索引,将更新记录在change buffer中,语句执行结束。

所以总结下两者,可以发现对于不在目标页在内存中,会涉及到随机IO的访问,所以合理使用普通索引可以减少随机IO的访问,以及对更新性能的提升。

change buffer的使用场景

但是对于所有的普通索引场景来说,change buffer都可以提升更新过程的性能嘛,在整个性能瓶颈其实就是change buffer merge的过程,对于写多读少的场景,一般都是写入之后,一定时间内才会读取,比如每天的定时账单、对账记录等,比较合适。但是对于写多读多的场景,异步写到change buffer中,马上就来查询,那么就会触发merge的过程。

如何选择?
普通索引和唯一索引相比来说,查询没有什么区别,在更新上还是普通索引性能更好,建议选择普通索引。

show variables like '%innodb_change_buffer_max_size%';

在这里插入图片描述
redo log 主要节省的是随机写磁盘的 IO 消耗(转成顺序写),而 change buffer 主要节省的则是随机读磁盘的 IO 消耗。

小结

本篇主要介绍了普通索引和唯一索引的更新和查询的过程分析,如果业务层面可以保证数据唯一键,那么建议使用普通索引,否则的话可以采用唯一索引,由此引出了更新一个sql时,会操作的三大日志文件 undo、redo、bin log,通过上面这张图可以很直观的看出。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/568121.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Git 创建版本库

Git 创建版本库 | CoderMast编程桅杆Git 创建版本库 在 Git 上创建版本库有两种方式,一种是直接拷贝远程 Git 仓库到本地,另外一种是我们自己创建本地的版本库。 拷贝远程仓库 拷贝远程仓库时我们需要知道远程仓库的URL地址,直接使用如下命令…

手撕netty源码(一)- NioEventLoopGroup

文章目录 前言一、NIO 与 netty二、NioEventLoopGroup 对象的创建过程2.1 创建流程图 前言 本文是手撕netty源码系列的开篇文章,会先介绍一下netty对NIO关键代码的封装位置,主要介绍 NioEventLoopGroup 对象的创建过程,看看new一个对象可以做…

使用mapinfo软件的在线地图插件运行错误解决

使用mapinfo软件的在线地图插件运行错误解决 一、如何解决win10/win11家庭版运行MapInfo中的在线地图插件报错【unexpected error;quitting】问题?二、如何解决在线地图切换地图源时的报错问题? 一、如何解决win10/win11家庭版运行MapInfo中的…

Linux中进程和计划任务管理(2)

一.进程命令 1.lsof lsof 命令,“list opened files”的缩写,直译过来,就是列举系统中已经被打开的文件。通过 lsof 命令,我们就可以根据文件找到对应的进程信息,也可以根据进程信息找到进程打开的文件。 格式&…

Jackson 2.x 系列【31】Spring Boot 集成之字典翻译

有道无术,术尚可求,有术无道,止于术。 本系列Jackson 版本 2.17.0 本系列Spring Boot 版本 3.2.4 源码地址:https://gitee.com/pearl-organization/study-jaskson-demo 文章目录 1. 场景描述2. 案例演示2.1 修改枚举2.2 定义注解…

【python】Python学生信息管理系统(源码+报告+本地存储)【独一无二】

👉博__主👈:米码收割机 👉技__能👈:C/Python语言 👉公众号👈:测试开发自动化【获取源码商业合作】 👉荣__誉👈:阿里云博客专家博主、5…

游戏黑灰产识别和溯源取证

参考:游戏黑灰产识别和溯源取证 1. 游戏中的黑灰产 1. 黑灰产简介 黑色产业:从事具有违法性活动且以此来牟取利润的产业; 灰色产业:不明显触犯法律和违背道德,游走于法律和道德边缘,以打擦边球的方式为“…

电磁仿真--基本操作-CST-(2)

目录 1. 回顾基操 2. 操作流程 2.1 创建工程 2.2 修改单位 2.3 创建 Shape 2.4 使用拉伸 Extrude 2.5 修改形状 Modify Locally 2.6 导入材料 2.7 材料解释 2.8 材料分配 2.9 查看已分配的材料 2.10 设置频率、背景和边界 2.11 选择 Edge,设置端口 2.…

深度解读半导体测试解决方案,4月25日精彩直播即将来袭!

半导体测试需求日益复杂、量产测试要求不断提升,行业工程师应该如何应对上述难题,提升测试的质量与效率,真正做到紧跟技术前沿,掌握创新应用,有效优化测试过程并降低测试成本? 针对上述痛点,加速…

Linux进阶篇:Centos7安装与配置mysql(rpm安装方式)

Linux服务搭建篇:Centos7安装与配置mysql(rpm安装方式) MySQL是一个开源的关系型数据库管理系统,由瑞典MySQL AB公司开发,现在属于Oracle公司。MySQL是最流行的关系型数据库管理系统之一,在WEB应用方面&am…

232 基于matlab的MIMO雷达模型下一种子空间谱估计方法

基于matlab的MIMO雷达模型下一种子空间谱估计方法,采用过估计的方法,避免了信源数估计的问题,对数据协方差矩阵进行变换,构造信号子空间投影矩阵和噪声子空间投影矩阵,不需要像经典的MUSIC一样对其进行特征分解&#x…

【网络编程】Java网络编程中的基本概念及实现UDP、TCP客户端服务器程序(万字博文)

系列文章目录 【网络通信基础】网络中的常见基本概念 【网络编程】Java网络编程中的基本概念及实现UDP、TCP客户端服务器程序(万字博文) 【网络原理】UDP协议的报文结构 及 校验和字段的错误检测机制(CRC算法、MD5算法) 目录 …

SpringCloud系列(12)--服务提供者(Service Provider)集群搭建

前言:在上一章节中我们成功把微服务注册进了Eureka集群,但这还不够,虽然注册服务中心Eureka已经是服务配置了,但服务提供者目前只有一个,如果服务提供者宕机了或者流量过大,都会影响到用户即服务使用者的使…

线上相亲竟然有三大好处,你认同吗?

当今社会高速的经济增长和急剧的社会变迁,使人们的生活水平极大提高,社会生活环境发生重大变化,人们的态度与观念也随之改变。这导致代际现象日益突出。以“80后”和“90后”为代表的青年群体成为社会新事物和新潮流的代言者,也自…

Jmeter04:关联

1 Jmeter组件:关联 概括:2个请求之间不是独立的,一个请求响应的结果是作为另一个请求提交的数据,存在数据交互 1.1 是什么? 就是一个请求的结果是另一个请求提交的数据,二者不再是独立 1.2 为什么&#x…

Nacos原理简单介绍

注册中心原理 官网:Nacos 注册中心的设计原理 | Nacos nacos注册中心采用了 :pull (客户端的轮询)和push (服务端主动push)策略 客户端启动时会将当前服务的信息包含ip、端口号、服务名、集群名等信息封装…

Valentina Studio Pro 13.10激活 专业的数据库管理软件

Valentina Studio Pro 支持连接所有主要数据库,可以帮助用户轻松创建、管理、查询和浏览Valentina DB、MySQL、MariaDB、PostgreSQL和SQLite数据库。 Valentina Studio Pro for Mac 13.10激活版下载 Valentina Studio Pro 是一款可以在 Mac 电脑上使用的数据库管理工…

水牛社靠谱吗,水牛社可以当做副业来做吗?

水牛社这个平台是否靠谱,能否作为副业的选择,一直是网友们热议的话题。实际上,水牛社是一个集合了众多网上赚钱活动任务和提供资源项目教程的综合性平台,它并非只局限于某一特定的项目,而是展现出多样化的特点。随着网…

Acrobat Pro DC 2021:强大的PDF编辑软件

Acrobat Pro DC 2021是Adobe公司推出的一款全面而强大的PDF编辑软件,凭借其卓越的性能和丰富的功能,成为了PDF编辑领域的领军者。 Acrobat Pro DC 2021中文激活版下载 这款软件具备全面的PDF编辑功能,包括文本编辑、图片处理、页面组织等&…

计算机组成原理—数据的表示和运算

二进制:2进1 八进制里的1位对应二进制里的三位 重点:转换为10进制