面试必备——InnoDB索引的物理结构

修改Innodb的数据页大小以优化MySQL的方法 主要介绍了修改Innodb的数据页大小以优化MySQL的方法,Innodb是MySQL下一个颇具人气的数据引擎,需要的朋友可以参考下 立即下载


基于MySQL8.0

1.简介

索引都用B树(其实是B+树,B+Tree也是B-Tree的一种,B-Tree=B Tree)结构,除了空间索引。空间索引用R树(R 树是用于为多维数据编制索引的专用数据结构)。

索引记录存储在树的叶子页中。

1.1.页

页,page。一个表示,任何时候在磁盘(数据文件)和内存(缓冲池)之间传输数据量的单位。

一页包含一行或多行,取决于每行的数据量。若某行不能完全适合单个页面,需要设置其他指针式数据结构,以便改行可以放到一个页中。

为了容纳更多数据,使用压缩行格式。使用BLOB或large text格式的表,使用紧凑行格式运行这些列和其余部分分开存储(外部页),以减少不引用这些列的查询的I/O开销和内存使用量。

1.2.页设置

索引页的默认大小是16KB、16K、16384三种形式都可以。

查看索引页的默认大小,单位为B。(1KB=1024B)

mysql> SHOW GLOBAL STATUS LIKE 'innodb_page_size';
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| Innodb_page_size | 16384 |
+------------------+-------+

启动MySQL实例时,通过innodb_page_size设置,一旦设置不可以动态修改,只能修改之后重启。

设置命令行格式如下,可选的有效值为64K、32K、16K、8K、4K。MySQL实例中所有磁盘数据结构共享相同的页设置。

	--innodb-page-size=#

1.3.页使用

新数据插入到聚集索引(主键索引)时,页会保留1/16的空间,以便将来插入和更新索引记录。如果按顺序(升序或降序)插入,生成的页最大为15/16;如果随机顺序插入,页最大1/2~15/16就满了。每个B树页的空间占比,可以通过innodb_fill_factor设置,默认值100,范围10-100的整数。

命令如下,可以动态设置。

	--innodb-fill-factor=#

举个例子:设置80,则留20%。100,会留1/16。

2.索引生成

InnoDB创建或重建B树索引的时候,会执行大容量加载,即排序索引生成。而不是在创建或重新生成索引时一次插入一个索引记录。

上文innodb_fill_factor变量,定义在排序索引构建期间填充的每个B树页上的空间百分比,剩余空间保留用于将来的索引增长。

空间索引不支持排序索引生成。

全文索引支持排序索引生成。

innodb_fill_factor,适用B树叶子页和非叶子页,不适用TEXT和BLOB等外部页。

2.1.三阶段

索引生成有三个阶段。

  1. 扫描聚集索引(主键索引),并生成索引条目并将其添加到排序缓冲区中。当排序缓冲区变满时,将对条目进行排序并写到临时中间文件中。此过程也称为“运行”。
  2. 如果将一个或多个“运行”写入临时中间文件,则会对文件中的所有条目执行合并排序。
  3. 排序后的条目将插入到B树中。

2.2.自下而上

排序索引构建使用"自下而上"的方法来构建索引。通过这种方法,对最右边的叶页的引用在B树的所有级别上都被保留。在必要的B树深度处分配最右边的叶页,并根据条目的排序顺序插入条目。一旦叶页已满,节点指针将附加到父页,并为下一次插入分配同级叶页。此过程将继续,直到插入所有条目,这可能会导致插入到根级别。分配同级页时,将释放对以前固定的叶页的引用,新分配的叶页将成为最右边的叶页和新的默认插入位置。

关注公众号- 编程highway - 获取更多好文和学习资料

emwin与Modbus通信结合:项目实例 通过实际项目讲解emwin界面设计与Modbus通信协议的融合应用,深入剖析数据交互流程。掌握emwin在工业控制场景中的实用技巧,提升系统人机交互与稳定通信能力。 阅读详情

相关推荐

Zynq 【SDK裸机开发之PS】——DDR的内存分配使用详解

Zynq如果跑操作系统的话,内存管理的工作都会交给系统来操作,但是如果是裸机的话,则需要自己对DDR3的内存进行管理。

shizhibuyi1234的博客 7376

【译】MySQL InnoDB 排序索引构建

尚学堂给同学们带来全新的Java300集课程啦!java零基础小白自学Java必备优质教程_手把手图解学习Java,让学习成为一种享受_哔哩哔哩_bilibili、 前言 不必了解 MySQL® 和Percona Server for MySQL 如何构建索引。 但是,如果您了解处理过程,那么当您想为数据插入保留适当数量的空间时,它可能会有所帮助。 从 MySQL 5.7 开始,开发人员改变了他们为 InnoDB 构建二级索引的方式,应用了自底向上而不是早期版本中使用的自顶向下方法。 在这篇文章中,我将

jmysql的博客 253

Mac OS X 工具技巧:一文搞定个性化命令行窗口(iTerm2 + zsh + oh-my-zsh 配置Powerline风格)

本不想写这篇文章的,因为在Linux下已经配置过很多次,想着mac应该找篇文章一次就搞定了,结果还是踩坑,看了很多文章,不是某一点没不清楚,就是截图有问题或者命令有问题,官网又难得找等等……花了3个多小时才搞定,所以,还是来总结一篇文章就能够搞定的教程。 为什么要用zsh?用了这么多年的bash,不能说bash不好,不过当我用了zsh后发现,什么叫更好用。 配置过程稍微有点繁琐,但是你看过效果...

mickjoust的技术小屋 1万+

mysql教程:更改数据页的大小(innodb_page_size)

在MySQL中,更改数据页的大小涉及到重新创建数据库的过程,因为数据页大小是在数据库创建时确定的,并且不能直接更改。以下是一般的步骤:备份数据库:在进行任何结构更改之前,强烈建议备份数据库以防止数据丢失。停止MySQL服务:使用适当的方法停止MySQL数据库服务,确保数据库处于离线状态。修改配置文件:找到MySQL的配置文件(例如my.cnf或my.ini),在该文件中找到[mysqld]请注意,应替换为您想要设置的新的数据页大小,以字节为单位(例如4KB、8KB、16KB等)。

学亮编程手记 3625

OpenCV快速入门:绘制图形、图像金字塔和感兴趣区域

OpenCV是一个强大的计算机视觉库,广泛应用于图像处理、计算机视觉和机器学习等领域。本文将介绍OpenCV中的一些基础功能,包括如何绘制图形、创建图像金字塔以及如何处理感兴趣区域(ROI)。

吾家有猫名探花的博客 1962

AWS S3文件上传性能优化:Java SDK多线程与分段上传实战指南

本文详细介绍了如何通过Java SDK优化AWS S3文件上传性能,重点讲解多线程并发上传与分段上传(Multipart Upload)技术的实战应用。通过动态调整分段策略、线程池配置及内存优化技巧,可显著提升大文件上传效率,实测显示组合方案比单线程上传提速近5倍。文章还涵盖加密上传、断点续传等高级场景解决方案,并提供了完整的性能对比测试数据。

d6e7f8的博客 1016

MySQL笔记-InnoDB物理及逻辑存储结构

首先是InnoDB的物理结构 它是B+树,这里有一点要注意的,数据=索引; 叶子结点存放数据、主键、事务ID、回滚指针的。 二级索引最终都会指向主键索引。 在InnoDB引擎中,创建表没有主键,InnoDB会把not null中unique作为主键,若这样的列也没有,那么InnoDB会生成6个字节的不可见的rowid。 在InnoDB中如果是独立表空间,创建一个表会生成2个文件...

IT1995的博客 4998

SWIFT报文实战指南:从MT700到MT799的信用证操作全解析

本文深入解析了国际贸易中信用证操作的核心SWIFT报文流程,从开证的MT700到各类通知、修改及结算报文(如MT707、MT730、MT754、MT732/734等)。通过实战案例与关键字段拆解,指导外贸与银行从业者精准处理报文,规避风险,并探讨了利用自动化工具提升处理效率的方法,助力保障跨境交易顺畅。

weixin_29015801的博客 878

Mysql修改innodb_page_size参数

指定InnoDB表空间的页面大小。可以以字节或千字节为单位指定值。例如,16KB的页面大小值可以指定为16384、16KB或16k。innodb_page_size只能在初始化MySQL实例之前配置,之后不能更改。如果未指定值,则使用默认页面大小初始化实例。参见第15.8.1节“InnoDB启动配置”。对于32KB和64KB页面大小,最大行长度约为16000字节。ROW_FORMAT=当innodb_page_size设置为32KB或64KB时,不支持COMPRESSED。

luomo0203的博客 5357

Windows MCP 安装教程:让 AI 代理与 Windows 系统无缝交互

通过以上步骤,你已经成功安装和配置了 Windows MCP 服务。现在你的 Cursor 编辑器可以通过 MCP 协议与 Windows 系统进行深度交互,AI 代理能够:启动和控制应用程序执行系统命令自动化 UI 操作获取系统状态信息这为 AI 辅助开发和工作流程自动化提供了强大的基础。如果你在使用过程中遇到任何问题,欢迎在评论区讨论或查看项目的官方文档。

chenchihwen的专栏 3349

YOLOv10改进策略【注意力机制篇】| 2024 蒙特卡罗注意力(MCAttn)模块,提高小目标的关注度

本文记录的是基于蒙特卡罗注意力(MCAttn)模块的YOLOv10目标检测改进方法研究。利用提高的跨尺度特征提取能力,使模型能够更好地传递和融合提取的多尺度特征,提高对小目标的关注度。Exploiting Scale-Variant Attention for Segmenting Small Medical Objects使用一种基于随机采样的池化操作来生成尺度无关的注意力图。它从三个不同尺度(3×33×33×3、2×22×22×2和1×11×11×1,即池化张量)中随机选择一个1×11×11×1注意力图

Limiiiing的博客 2186

【MySQL】Innodb存储引擎之物理存储结构(MySQL专栏启动)

​在 InnoDB 存储引擎中,存储结构分为逻辑结构和物理结构,本文详细讲解Innodb的物理结构,包括表空间(独立表空间、共享表空间)、日志文件组(重做文件组)和表结构定义文件组成,及其细节。 同时本文也是对前面文章的一个补充,结合使用效果更佳:《高性能高可用设计实战-索引篇》、《MVCC详解与MVCC实现原理》、《MySQL日志系统以及InnoDB背后的技术》、《Innodb存储引擎逻辑存储结构与底层实现解析》。

小明的Java问道之路 5046

自然语言处理在智能客服系统中的应用

引言与背景 1.1 书籍的目的和内容概述 《自然语言处理在智能客服系统中的应用》旨在探讨自然语言处理(NLP)技术在智能客服系统中的应用,帮助读者理解NLP的核心概念及其在解决实际业务问题中的关键作用。随着人工智能技术的快速发展,自然语言处理成为构建智能客服系统的核心模块之一。本书将深入解析NLP

AI天才研究院 966

Java最新DBA技术栈(二):MySQL 存储引擎_bdb存储引擎,泛微网络java面试题

NDB 存储引擎也叫 NDB Cluster 存储引擎,主要用于 MySQL Cluster 分布式集群环境,Cluster 是 MySQL 从 5.0 版本才开始提供的新功能。这部分我们可能并不仅仅只是介绍 NDB存储引擎,因为离开了 MySQL CLuster 整个环境,NDB 存储引擎也将失去太多意义。简单的说,Mysql Cluster 实际上就是在无共享存储设备的情况下实现的一种内存数据库 Cluster 环境,其主要是通过 NDB Cluster(简称 NDB)存储引擎来实现的。

2401_84584522的博客 847

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

2021年Java知识体系总结,Java开发面试中常问的数据库方面问题

ON <表名称> --触发器是属于某一个表的:当在这个表上执行插入、 更新或删除操作的时候就导致触发器的激活. 我们不能给同一张表的同一个事件安排两个触发器。 FOR EACH ROW --触发器的执行间隔:FOR EACH ROW子句通知触发器 每隔一行执行一次动作,而不是对整个表执行一次。 <触发器SQL语句> --触发器包含所要触发的SQL语句:这里的语句可以是任何合法的语句, 包括复合语句,但是这里的语句受的限制和函数的一样。 什么是存储过程 简单的说,就是..

m0_60226911的博客 251

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

数据库主键选型:自增ID与UUID的性能原理与实战选择

在数据库设计与优化中,主键的选择是影响系统性能与扩展性的核心决策之一。从技术原理上看,主键作为数据行的唯一标识,其设计直接关系到数据的存储结构、索引效率与查询性能。在MySQL InnoDB存储引擎中,聚集索引的特性决定了主键值直接影响数据的物理存储顺序,而页分裂机制则对写入性能产生关键影响。自增ID凭借其严格递增的特性,能实现高效的顺序写入,极大减少页分裂,从而提升OLTP场景下的写入性能与存储紧凑度。相比之下,UUID虽然提供了全局唯一性的优势,但其随机性会导致写入时的随机I/O,增加页分裂概率与存储空

weixin_33924220的博客 392

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

更改innodb_page_size状态值

关于INNODB引擎的PAGE大小,如果安装好了是不能改变的。但是可以在安装前,编译对应的源代码。1.按照一下步骤即可。我用的版本是5.1.30 企业版。(这里,鼓励大家买企业版)更改源码:在storage/innobase/incluce/univ.i 找 UNIV_PAGE_SIZE#define UNIV_PAGE_SIZE (1 * 8192) 可以更改如下:#define UNIV_PA...

weixin_34400525的博客 769

Innodb中聚簇索引

 在一次面试过程中别问道Innodb中聚簇索引,让我介绍一下,当时表现很差,回答的条理不清。于是回来后对Innodb的聚簇索引进行进一步的理解和学习。 理解聚簇索引前先明确一下索引的本质是什么?   MySQL官方对索引的定义为:索引(Index)是帮助MySQL高效获取数据的数据结构。提取句子主干,就可以得到索引的本质:索引是一种数据结构。而且可以知道Innodb中索引采用的数据结构都是B+...

qydcsdn的博客 3695

Innodb的page大小为16KB,16KB page目前而言,是否可以修改问题

innodb的page大小为16KB,16KB page目前而言,是否可以修改问题

Miracle_ze的博客 1707

mysql innodbpagesize_修改Innodb的数据页大小以优化MySQL的方法

我们知道Innodb的数据页是16K,而且是一个硬性的规定,系统里没更改的办法,希望将来MySQL也能也Oracle一样支持多种数据页的大小。但实际应用中有时16K显的有点大了,特别是很多业务在Oracle或是SQL SERVER运行的挺好的情况下迁到了MySQL上发现IO增长太明显的情况下,就会想到更改数据页大小了。实际上innodb的数据页大小也是可以更改的,只是需要在源码层去更改,然后重新r...

weixin_35552251的博客 1154

InnoDB 索引的物理结构

除空间索引(spatial indexes)外,InnoDB索引是B树数据结构。 空间索引使用R树,R树是用于索引多维数据的专用数据结构。 索引记录存储在其B树或R树数据结构的叶页中。 索引页的默认大小为16KB。 当新记录插入到InnoDB聚集索引中时,InnoDB尝试留页面的1/16空闲以供将来插入和更新索引记录。 如果按顺序插入索引记录(升序或降序),则所得到的索引页使用率大约为15/16。...

kesenzhang的博客 384

InnoDB 索引页物理结构和逻辑结构

一、物理结构 1.The FIL header and trailer 2.System records 3.User records 4.The INDEX header 二、Data Removal 三、逻辑结构 1.Leaf and non-leaf pages 2. 2.Pages at the same level 3.Innodb为主键创建索引,是强制的 4.为什么默认主键值自增的

FixedStar 的博客 930

作业:page大小以及严格模式怎样修改

mysql在使用innodb引擎的时候,默认页的大小是16kb,如果说超出了16kb,的话可以在配置文件中修改首先查看当前page的大小:命令语句是:show global status like 'innodb_page_size'; 如果要修改page的大小的话,需要在配置文件中找到参数:UNIV_PAGE_SIZE_SHIFT,对后面的数值进行修改。且需要注意的是,修改的数值代表的是2的多少次方,并且要注意page页面的大小只能是2的多少次方,比如8k,16k,32k等等。修改成功保存退出后,重新编译

lml_0916的博客 1041

mysql 索引页物理结构--physical structer of an innodb index

mysql 索引页物理结构-physical structer of an innodb index https://dev.mysql.com/doc/refman/5.7/en/innodb-physical-structure.html 除了空间索引,innodb索引是B数数据结构。空间索引使用R数,其是用于索引多维数据的专用数据结构。索引记录存储在其B-tree或R-tree的叶子

aeoluspu的专栏 2580

Spring AI + GPT-5.5 + Ollama 配置教程:Base URL、超时与流式调用

由于不同 Spring AI、Spring Boot 小版本之间仍可能存在差异,创建项目时应检查 Spring Initializr、Spring AI BOM 和官方兼容矩阵,不要直接复制旧教程中的 Starter 名称和版本号。多人项目最好隔离不同客户端,并在脱敏前提下记录最终 URL、状态码、请求耗时、请求 ID 和模型 ID。Spring AI 接入模型 API,至少要同时确认 Starter、Base URL、请求路径、API Key、模型 ID、连接超时、读取超时和流式客户端这 8 项。

2601_95893075的博客 223
上一篇: 面试必备——InnoDB磁盘结构之聚集索引和二级索引
下一篇: JDK的两个大版本,为什么要选LTS
编程还未
博客等级 码龄5年 4293粉丝 31原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

编程还未

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值