MySQL索引的更新策略

article/2025/10/9 17:53:20

对于数据的每一次更新,MySQL并不会每次都会更新索引(针对非唯一性索引而言),索引的更新策略是这样的:

在InnoDB中,增删改都会立刻修改主键or唯一索引,但是不会rebuild全局索引,而是对这些索引增加值(或移除值)。
对于非唯一性索引,InnoDB会进行change buffering操作。将更改排入队列,之后再在后台将其合并到索引中。甚至,为了后续物理更新更加高效,会将变更进行合并。
这种特性不需要手动开启,而是默认开启的。在MySQL5.1版本,change buffering操作仅仅适用于insert。而在MySQL5.5版本之后,change buffering操作则扩展到update和delete里。

对于change buffering,是这样定义的:
change buffer是一个特殊的数据结构。对于那些不在缓存池内的二级索引有修改时,对应的修改会被缓存在change buffer里(二级索引就是非聚集索引)。对二级索引有修改的场景包括:对数据的插入、更新和删除操作。之后如果有读操作时,会将这些二级索引页加载到缓存池里时,此时才会将change buffer里的修改与二级索引页合并。

跟聚集索引不同,二级索引往往是不唯一的,并且数据会以一种相对随机的顺序插入二级索引。类似的,删除和更新操作也会往往会影响索引树上的不相邻的二级索引页。因此采取:当被变更的二级索引页从磁盘中被读入缓存池时,才进行合并工作。这种将更改延后进行合并的操作,能够避免大量的随机磁盘读取IO操作。

这种清洗工作往往在系统处于空闲时周期进行,或者通过一段短暂的shutdown来将更新的索引页写入磁盘。这种清洗工作将一系列索引值写入磁盘块,会比来一个写一次快得多。

当存在很多被影响的行,存在很多需要更新的二级索引时,change buffer的合并工作往往会消耗几个小时。在这段时间内,磁盘IO数量激增,会导致对于磁盘的查询操作宕机。另外,change buffer的合并工作会在事务提交后进行,甚至会在服务器的关闭重启后进行。

在内存中,change buffer占用了缓冲池的一部分。在磁盘上,change buffer是系统表空间的一部分,当数据库服务器被关闭时,索引的更改将会被缓存在其中。

你可以自定义最大的change buffer的大小。详情可见:https://dev.mysql.com/doc/refman/8.0/en/innodb-change-buffer.html#innodb-change-buffer-configuration

参考资料:

1. https://stackoverflow.com/questions/23435361/does-mysql-update-the-index-on-all-inserts-can-i-make-it-update-after-every-x-i

2. https://dev.mysql.com/doc/refman/8.0/en/innodb-change-buffer.html


http://chatgpt.dhexx.cn/article/YosyXqG1.shtml

相关文章

苹果各机型尺寸大小

//6.5英寸 #define iPhoneXSMax ([UIScreen instancesRespondToSelector:selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(1242, 2688), [[UIScreen mainScreen] currentMode].size) : NO) //6.1英寸 #define iPhoneXR ([UIScreen instancesRespondToSelector:selec…

iOS 手机尺寸

iPhone设备 物理分辨率是硬件所支持的,逻辑分辨率是软件可以达到的。 代数设备操作系统逻辑分辨率(point)物理分辨率(pixel)屏幕尺寸(对角线长度)缩放因子 iPhone 第一代iPhone 2GiOS 1320 x 480480 x 3203.5寸1x第二代iPhone 3iOS 2320 x 480480 x 3203.5寸1…

jQuery weui 时间选择器datetimepicker年月日最简单解决方案

使用jqweui的时候发现,datetimePicker(时间日期选择器)竟然不提供只有年月日这种模式,真是牛逼(垃圾),跟着我,只需要很简单的修改就好了,上图 下面是js $("#datati…

jquery weui 显示loading

jQuery weui 显示loading按钮官方文档并没有给出demo&#xff0c;经过调试&#xff0c;把代码给拷贝了出来。 实现显示loading的代码如下&#xff1a; <div id"loadDiv" style"display: none;" class"weui-toast weui_loading_toast weui-toast--…

$ppclass php,jquery weui

"weui-tab"!----"weui-"!--二级页积分详情--"""weui--itemweui-tab__bd-item--active"divclass"details"divclass"page-header"?Html::img($this-theme-getAssetUrl(images/logo.png),[classlogo])?/divahref&q…

移动端框架之JQuery WeUI

和JQuery WeUI 配合使用的WeUI&#xff0c;是移动端快速开发的利器。 在初步使用的过程中&#xff0c;发现JQuery WeUI扩展的几个功能特别实用&#xff1a; 1.通知&#xff1a;模仿iOS风格的通知。你可以自定义标题&#xff0c;文案和图标。通过滑动手势可以关闭。 这种通知形…

基于Jquery WeUI的微信开发H5页面控件的经验总结(2)

在微信开发H5页面的时候&#xff0c;往往借助于WeUI或者Jquery WeUI等基础上进行界面效果的开发&#xff0c;由于本人喜欢在Asp.net的Web界面上使用JQuery&#xff0c;因此比较倾向于使用 jQuery WeUI&#xff0c;本篇随笔结合官方案例和自己的项目实际开发过程的经验总结&…

jquery weui 图片浏览器Photo Browser 如何使用?

对应组件地址&#xff1a;http://jqweui.com/extends#swiper 先说说业务场景&#xff1a;类似朋友圈这样的布局效果&#xff0c;点击小图可以浏览大图&#xff0c;并支持大图左右切换&#xff0c;效果图如下&#xff08;加了滚动加载更多的操作在里面&#xff09;&#xff1a;…

jQuery WeUI日历calendar时间段(开始日期默认选中日期是今天,结束日期设置最小日期),显示日期格式是yyyy年mm月dd日

jQuery WeUI官网&#xff1a; https://jqweui.cn(国内) 说明 日历calendar时间段为两段&#xff0c;开始日期和结束日期。 开始日期&#xff1a;打开后&#xff0c;默认选中日期是今天。 结束日期&#xff1a;打开后&#xff0c;默认选中和最小日期是开始日期。 html <d…

【WeUI】关于jQuery WeUI和WeUI版本兼容的问题

最近做的一个小demo&#xff0c;在添加Dialog的时候出现了对话框显示的问题&#xff0c;如下左图所示。 一开始以为自己的写的CSS文件影响了&#xff0c;注释掉还是这个问题&#xff0c;所以问题指向很明确了&#xff0c;是官方weui.css的问题。但是官方demo里的运行是正常显示…

jQueryWEUI自定义对话框-带有textarea

jQueryWEUI 示例下载 在jQueryWEUI中提供了很多类型的对话框&#xff0c; 可以去访问看一下。 今天记录的则是&#xff0c;自己定义的一个带有文本域的对话框&#xff0c;这样&#xff0c;可以不通过调转页面&#xff0c;实现一些信息的提交。比如&#xff0c;发送留言&#x…

jQuery weui 时间选择器datetimepicker只用年月日

<input placeholder"请选择出生日期" name"birth_time" type"text" iddatetime-picker />let allTime ;var myDate new Date();//let CreateDateLessD myDate.getFullYear() "-" (myDate.getMonth() 1) "-" …

关于Jqueryweui 的select联动用法

在使用Jquery weui 框架时&#xff0c;我想实现根据收货地址获得该条收货地址的绑定的联系人和电话。 但是又懒得根据收货地址查询联系人和联系电话。&#xff08;因为收货地址都是从数据库获取的&#xff0c;此时不仅拿到了收货地址&#xff0c;还拿到了联系人和联系电话&…

jQuery WeUI 上传

jQuery WeUI 是专为微信公众账号开发而设计的一个框架&#xff0c;jQuery WeUI的官网&#xff1a;http://jqweui.com/ 需求&#xff1a;需要在微信公众号网页添加上传图片功能 技术选型&#xff1a;实现上传图片功能可选百度的WebUploader、饿了么的Element和微信的jQuery We…

jQuery WEUI select的使用

jQuery WEUI select的使用 1.官网样式&#xff1a; html样式 <div class"weui-cell"><div class"weui-cell__hd"><label class"weui-label">联系人</label></div><div class"weui-cell__bd">&l…

前端优秀框架jQuery weui推荐

作为和微信风格类似的一款移动端开发工具 jQuery weu在移动端开发中也是能完美兼容微信&#xff0c;而且语法简单对前端萌新开发移动端H5页面相对友好 这边推荐的资源网站是 http://www.santii.com/weui 这这里你可以看到很完整的组件使用 但这个框架的依赖相对比较难找 可能需…

浅谈jQuery WeUI框架

WeUI 是一套同微信原生视觉体验一致的基础样式库&#xff0c;由微信官方设计团队为微信内网页和微信小程序量身设计。而jQuery WeUI是在其基础上的加强版本&#xff0c;专为微信公众账号开发而设计的一个简洁而强大的UI库&#xff0c;包含全部WeUI官方的CSS组件&#xff0c;并且…

jQuery WeUI学习笔记一

一 引言 最近在对时间典当行这一公众号进行一个粗浅的学习。涉及到WeUI插件库&#xff0c;就整理以下笔记。 &#xff11; jQuery WeUI官网地址&#xff1a;http://jqweui.com/ &#xff12; WeUI 目前只包含 CSS 代码&#xff0c;核心文件是weui.css jQuery WeUI WeUI …

Jquery WeUI(一)

用于微信端的控件UI &#xff0c; 首先&#xff0c;需要做的是开发一个微信能访问的网页&#xff0c;并和微信关联 A&#xff0e; 创建一个空网站 B&#xff0e; 增加一般处理程序 A&#xff0e; 增加 web 网页 和空文件到项目中 B&#xff0e; 申请和配置测试服务 创建菜单 通…

jQuery WeUI学习笔记1

前言&#xff1a;内容基本是参考博客笔记&#xff0c;偶尔会加些个人补充&#xff0c;仅作为复习巩固用途。如有错误&#xff0c;请指出&#xff0c;谢谢。 提示&#xff1a;后续更深理解在补充 前序、使用过程出现的问题 注意&#xff1a;发现问题解决问题比学习新知识更重要…