mysql普通索引与唯一索引怎么选择

news/2024/11/3 4:16:59/

学习mysql普通索引与唯一索引选择记录总结,学习链接:http://gk.link/a/11YG8

从mysql查询操作分析:

普通索引:查到满足条件的第一条记录后,还会继续查找下一条记录,直到出现满足条件的记录出现后停止检索

唯一索引:由于索引定义了唯一性,查找到第一个满足条件的记录后,就会停止继续检索

InnoDB 的数据是按数据页为单位来读写的。也就是说,当需要读一条记录的时候,并不是将这个记录本身从磁盘读出来,而是以页为单位,将其整体读入内存。对于查询来说使用这两种索引差别微乎其微。

数据页大小:默认16kb

从mysql更新操作分析:

普通索引更新的时候会使用到change buffer,对于唯一索引来说,所有的更新操作都要先判断这个操作是否违反唯一性约束。唯一索引更新不能使用change buffer。

change buffer是什么?

当需要更新一个数据页,如果数据页在内存中就直接更新,如果不在内存中,在不影响数据一致性的前提下,InnoDB会将这些更新操作缓存在change buffer中。下次查询需要访问这个数据页的时候,将数据页读入内存,然后执行change buffer中的与这个页有关的操作。保证这个数据逻辑的正确性。

change buffer是可以持久化的数据。change buffer主要节省的是随机读磁盘的IO消耗。

知识点补充:

merge:将change buffer中的操作应用到原数据页上,得到最新结果的过程。

访问数据页会触发purge,系统有后台线程定期merge,在数据库正常关闭的过程中,也会执行merge。merge 的时候是真正进行数据更新,change buffer 的主要目的就是将记录的变更动作缓存下来,所以在一个数据页做 merge 之前,change buffer 记录的变更越多(也就是这个页面上要更新的次数越多),收益就越大

怎样设置change buffer

change buffer用的是buffer pool里的内存,大小通过参数innodb_change_buffer_max_size来动态设置。

change buffer使用场景

写多读少的业务场景,常见的业务模型比如:账单、日志类的系统

反例:比如一个业务场景,更新数据后立马做查询操作,数据库会先将更新先记录在 change buffer,但是马上就会访问这个数据页,从而触发 merge 过程。这样操作change buffer反而起了副作用,随机访问IO的次数不会减少,增加了change buffer的维护代价。

索引选择

分析完查询与更新,得出结论:尽量选择普通索引。


http://www.ppmy.cn/news/30116.html

相关文章

经典分类模型回顾5—DenseNet实现图像分类(matlab)

DenseNet,全称为Densely Connected Convolutional Networks,中文名为密集连接卷积网络,是由李沐等人在2017年提出的一种深度神经网络架构。 DenseNet旨在解决深度神经网络中的梯度消失问题和参数数量过多的问题,通过构建密集连接…

滚蛋吧,正则表达式!

大家好,我是良许。 不知道大家有没有被正则表达式支配过的恐惧?看着一行火星文一样的表达式,虽然每一个字符都认识,但放在一起直接就让人蒙圈了~ 你是不是也有这样的操作,比如你需要使用「电子邮箱正则表达式」&…

vue简介与环境搭建

该栏目会非定期出教学视频,文档一般与视频关联,感谢观看。b站搜索博主同名,可观看教学视频。 一、Node.js 什么是node?是一个基于Chrome V8引擎的JavaScript运行环境,使用了一个事件驱动、非阻塞式I/O模型&#xff0c…

时序预测 | MATLAB实现IWOA-BiLSTM和BiLSTM时间序列预测(改进的鲸鱼算法优化双向长短期记忆神经网络)

时序预测 | MATLAB实现IWOA-BiLSTM和BiLSTM时间序列预测(改进的鲸鱼算法优化双向长短期记忆神经网络) 目录时序预测 | MATLAB实现IWOA-BiLSTM和BiLSTM时间序列预测(改进的鲸鱼算法优化双向长短期记忆神经网络)预测效果基本介绍程序设计参考资料预测效果 基本介绍 MATLAB实现IWO…

【算法】DFS与BFS

作者:指针不指南吗 专栏:算法篇 🐾题目的模拟很重要!!🐾 文章目录1.区别2.DFS2.1 排列数字2.2 n-皇后问题3.BFS3.1走迷宫1.区别 搜索类型数据结构空间用途过程DFSstackO( n )不能用于最短路搜索到最深处&a…

基于Java的某石材公司货物管理系统的设计与实现

技术:Java、JSP等摘要:随着信息化技术的发展,计算机的应用已迅速扩展到企事业管理与办公自动化领域,而数据库技术也被广泛应用。电脑操作及管理日趋简化,电脑知识日趋普及,同时市场经济快速多变、竞争激烈&…

Spark使用Log4j将日志发送到Kafka

文章目录自定义KafkaAppender修改log4j.properties配置启动命令配置添加参数启动之后可以在Kafka中查询发送数据时区问题-自定义实现JSONLayout解决自定义JSONLayout.java一键应用可能遇到的异常ClassNotFoundException: xxx.KafkaLog4jAppenderUnexpected problem occured dur…

软工2023个人作业二——软件案例分析

项目内容这个作业属于哪个课程2023年北航敏捷软件工程这个作业的要求在哪里个人作业-软件案例分析我在这个课程的目标是学习并掌握现代软件开发和项目管理技术,体验敏捷开发工作流程这个作业在哪个具体方面帮助我实现目标从软件工程角度分析比较我们所熟悉的软件&am…