MySQL-常用存储引擎-深入了解

MySQL 海量数据优化(理论+实战) 吊打面试官 一、准备表数据 咱们建一张用户表,表中的字段有用户ID、用户名、地址、记录创建时间,如图所示 OK,接下来准备写一个存储过程插入一百万条数据 CREATE TABLE `t_user` ( `id` int NOT NULL, `user_name` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL, `address` varchar(255) DEFAULT NULL, `create_ti 阅读详情

1、MyISAM引擎

1.1 什么时候使用?

当表的读操作远远大于写操作,且不需要事务的支持的时候,可以选用MyISAM引擎。
因为MyISAM不提供事务支持,也不支持行级锁和外键。当插入/更新操作需要写操作时需要把整个表锁定,效率太低。但是MyISAM保存了表的行数,SELECT COUNT(*) FROM TABLE能直接返回表的行数而不用扫描全表计算。

1.2 支持的三种存储格式

  • **静态表:**默认的存储格式,表中的字段都是非变长字段,每个记录都是固定长度的,优点是存储非常迅速,容易缓存,出现故障容易恢复;缺点是占用的空间通常比动态多,空格的问题。
  • **动态表:**表中包含变长字段,记录不是固定长度的,优点是占用的空间相对较少,但是频繁的更新和删除记录会产生碎片,需要定期执行 OPTIMIZE TABLE `语句改善性能,并且出现故障恢复相对比较困难。
  • **压缩表:**由 myisampack 工具创建,占据非常小的磁盘空间。因为每个记录都是单独压缩的,只有非常小的访问开支。

2、InnoDB引擎/MySQL默认引擎

2.1 有什么特点?

  • 提供对数据库事务的支持,提供了提交、回滚、崩溃恢复能力的事务安全;
  • 提供了行级锁和外键约束,由于锁的细粒度小,行级锁使得写操作不会锁定全表,在高并发较高的场景下使用InnoDB会大幅提升效率;
  • 设计的出发点是处理大数据容量的数据库系统;
  • MySQL运行时InnoDB会在内存中建立缓存池,用于缓存数据和索引。比较MyISAM引擎,InnoDB写操作效率慢一些,并且会占用更多的磁盘空间存储数据和索引。

2.2 特色功能

  • **自动增长列:**可以设置自动增长列的初始值,对InnoDB引擎的表,自动增长列必须是索引/组合索引的第一列;对MyISAM表可以是组合索引的其他列;
  • 外键约束: InnoDB特有,在创建外键的时候,要求父表必须有对应的索引,子表在创建外键的时候也会自动创建对应的索引。在创建外键的时候,可以指定在删除更新父表的时候,对子表进行相应的操作。

2.3 InnoDB和MyISAM的区别

  • InnoDB索引是聚簇索引,MyISAM索引是非聚簇索引
  • InnoDB的主键索引的叶子节点存储着行数据,因此主键索引非常高效; MyISAM索引的叶子节点存储的是行数据地址,需要再寻址一次才能得到数据
  • InnoDB非主键索引的叶子节点存储的是主键和其他带索引的列数据,因此查询时做到覆盖索引会非常高效

2.4 InnoDB关键特性

  • 插入缓存:对于非聚集索引的插入或者更新操作,先判断插入的非聚集索引页是否在缓冲池中,若在则直接插入,若不在则先放入到一个Insert Buffer对象中,然后再以一定的频率和情况进行Insert Buffer和辅助索引叶子节点的merge(合并)操作,这时通常将多个插入合并到一个操作中(因为在一个索引页中),这就大大提高了对于非聚集索引插入的性能。需要满足非唯一的辅助索引条件。
  • 二次写: 由两部分组成:一部分是内存中的doublewrite buffer,大小为2MB,另一部分是物理磁盘上共享表空间连续的128个页,即两个区,大小同样为2MB。
    在对缓冲池的脏页进行刷新时,并不直接写磁盘,而是会通过memcpy函数将脏页先复制到内存中的doublewrite buffer,之后通过doublewrite buffer再分两次,每次1MB顺序的写入到共享表空间的物理磁盘上,然后马上调用fsync函数,同步磁盘,避免缓冲写带来的问题,在完成double write页的写入后,再将doublewrite buffer中的页写入到各个表空间文件中,此时的写入是离散的。
  • **自适应哈希索引:**InnoDB会监控对表上各索引页的查询,如果观察到建立哈希索引可以带来速度提升,则建立哈希索引,称为自适应哈希索引;
  • **异步IO:**用户可以在发出一个IO请求后立即再发出另一个IO请求,当全部IO请求发送完毕后,等待所有IO操作的完成,这就是AIO。
  • 刷新邻接页:当刷新一个脏页时,InnoDB会检测该页所在区的所有页,如果是脏页,那么一起进行刷新,这样做的好处是通过AIO可以将多个IO写入操作合并为一个IO操作。

2.5 InnoDB的后台线程

InnoDB后台线程的分类如图所示
在这里插入图片描述

2.6 InnoDB的逻辑存储结构

从InnoDB存储引擎的逻辑存储结构来看,所有数据都被逻辑的存放在一个空间中,称之为表空间。表空间又由段、区、页 组成。

  • 段:表空间是由各个段组成的,常见的段有数据段、索引段、回滚段等。InnoDB存储引擎是索引组织的,因此数据即索引,索引即数据。数据段即B+树的叶子节点,索引段即B+树的非索引节点。
  • 区:区是由连续页组成的空间,在任何情况下每个区的大小都为1MB,为了保证区中页的连续性,InnoDB存储引擎一次从磁盘申请4~5个区,在默认情况下,InnoDB存储引擎页的大小为16KB,即一个区中一共有64个连续的页
  • 页:页是InnoDB磁盘管理的最小单位,在InnoDB存储引擎中,默认每个页的大小为16KB,而从InnoDB 1.2x版本开始,可以通过参数**innodb_page_size**将页的大小设置为4k,8k,16k。
  • 行:InnoDB是面向列的,即数据是按行进行存放的

3、MEMORY存储引擎

  • MEMORY 存储引擎使用存在于内存中的内容来创建表,该类型的表访问速度快,因为数据是放在内存中的,一旦服务关闭,表中的数据就会丢失。
  • 在 MEMORY 表中创建索引,可以指定使用 Hash 索引还是 BTREE 索引。
  • MEMORY 存储引擎主要用于那些内容变化不频繁的代码表,或者作为统计操作的中间结果表,便于高效的对中间结果进行分析并得到最终的统计结果。

4、MERGE存储引擎

  • MERGE 存储引擎是一组 MyISAM 表的组合,这些 MyISAM 表必须结构完全相同
  • MERGE表本身没有数据,对 MERGE 类型的表可以进行查询、更新、删除操作,这些操作实际上是对内部数据的 MyISAM 表进行的。

5、如何选择以上四个存储引擎?

  • MyISAM:如果应用以读操作或插入操作为主,只有很少的更新和删除操作,并且对事务的完整性、并发性要求不高,那么选择这个存储引擎是非常合适的。主要应用场景: WEB、数据仓库。

  • InnoDB:用于事务处理应用程序,支持外键。如果应用对事务的完整性要求高,在并发条件下要求数据的一致性,数据操作除了插入和查询外,还包括很多的更新删除操作,那么InnoDB 是合适选择。 InnoDB 还能确保事务的完整提交和回滚,适用于计费和财务系统。

  • MEMORY: 将数据保存在内存中,在需要快速定位记录和其他类似数据的环境下,可提供极快的访问。 MEMORY 的缺陷是对表的大小有限制,太大的表无法缓存在内存中,其次要确保表的数据可恢复,数据库异常终止后表中的数据是可以恢复的。 通常用于更新不太频繁的小表,用于快速访问得到结果。

  • MERGE:用于将一系列等同的 MyISAM 表以逻辑方式组合在一起,并作为一个对象引用它们。 MERGE 优点在于可以突破对单个 MyISAM 表大小的限制,并且通过将不同的表分布在多个磁盘上,可以有效的改善 MERGE 表的访问效率。

SAP EWM开发实战:手把手教你用ABAP类/SCWM/CL_SP_PRD_INB创建内向交货单(含完整代码) 本文详细介绍了在SAP EWM系统中使用ABAP类/SCWM/CL_SP_PRD_INB创建内向交货单的完整开发流程。通过实例代码和分步指导,帮助开发者掌握从环境准备、抬头数据创建到行项目填充和保存的全过程,实现高效物流运作。特别适合需要自动化处理内向交货单的SAP EWM开发人员。 阅读详情

相关推荐

mysql处理海量数据时的一些优化查询速度方法

由于在参与的实际项目中发现当mysql表的数据量达到百万级时,普通SQL查询效率呈直线下降,而且如果where中的查询条件较多时,其查询速度简直无法容忍。曾经测试对一个包含400多万条记录(有索引)的表执行一条条件查询,其查询时间竟然高达40几秒,相信这么高的查询延时,任何用户都会抓狂。因此如何提高sql语句查询效率,显得十分重要。以下是网上流传比较广泛的30种SQL查询语句优化方法: 1、应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描。 2、对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。 3

mysql limit 海量_【转】MySQL海量数据分页Limit优化

MySQL Limit的使用方法:在我们使用查询语句的时候,经常要返回前几条或者中间某几行数据,这个时候怎么办呢?不用担心,mysql已经为我们提供了这样一个功能。SELECT * FROM table_nameLIMIT start, end1、LIMIT子句可以被用于强制SELEDT语句返回指定的记录数。LIMIT接受一个或两个数字参数。参数必须是一个整数常量。如果给定两个参数,第一个参数指定...

weixin_29728529的博客 357

NVMe-MI --- Message Servicing Model(消息服务模型)

本文主要介绍NVMe-MI消息服务模型,两个主要类别是请求消息和响应消息。并介绍带外机制消息服务状态机。

智小星的博客 2011

MySQL的优化——提升大量数据查询效率的神器

在应用的的开发过程中,由于初期数据量小,开发人员写 SQL 语句时更重视功能上的实现,但是当应用系统正式上线后,随着生产数据量的急剧增长,很多 SQL 语句开始逐渐显露出性能问题,对生产的影响也越来越大,此时这些有问题的 SQL 语句就成为整个系统性能的瓶颈,因此我们必须要对它们进行优化. 为什么这么说呢?因为在MySQL查询语句中,语法比较的通用吗,要想得到一个数据集可以使用不同的查询语句! 例如我们需要查询一个数据表有多少行数据集? 1、暴力搜索 select count(*) from da

迷茫与徘徊只会让你陷入绝境,欢迎私信博主,带你开始提升变现价值! 3230

POST 接口,将参数拼接到 URL 上,而不是将其作为表单数据发送

POST 接口,将参数拼接到 URL 上,而不是将其作为表单数据发送

pig_ning的博客 3143

如何用 Python 实现自动化测试?详细步骤和代码示例

Python自动化测试实战指南 本文系统介绍了使用Python构建自动化测试体系的完整方案。主要内容包括: 环境搭建:Python 3.8+虚拟环境配置,安装pytest、Selenium等核心测试库 分层测试实现: 单元测试:通过计算器示例演示pytest断言和异常测试 API测试:使用requests库进行RESTful接口验证 UI测试:Selenium WebDriver实现网页交互测试 高级特性: 使用fixture管理测试依赖 参数化实现数据驱动测试 生成HTML和Allure测试报告 GitH

m0_64424835的博客 449

常用mysql引擎及工作原理_了解MySQL存储引擎工作原理

MySql数据库最大的特色就是其插件式的存储引擎架构,本文主要介绍MySql常用的存储引擎,为开发时选择合适的存储引擎提供参考。1. MySql体系结构#在介绍存储引擎之前先来介绍下MySql的体系结构,以便大家知道存储引擎在MySql整个体系中处于什么位置。下图是官方提供的一张架构图:MySQL体系结构图从上图可以发现,MySQL由以下几部分组成:连接池组件管理服务和工具组件SQL接口组件查询分...

weixin_26834281的博客 124

Marin说PCB之LPDDR5的布线注意事项--03

这个规则中是把每个字节中的WCK to RDQS 以及DM / DQ to WCK等长规则都加到了DM / DQ这个等长规则中去了,因为芯片手册上的设计要求中的DM / DQ这个group的等长误差是+-50MIL, WCK to RDQS的等长group的规则是62.5MIL,DM / DQ to WCK等长group的规则是相对松一些是150MIL。其实上面的等长规则还是建少了一些的,例如手册上要求的每个channel的WCK0:1,WCK2:3等长误差在+-488MIL,这个规则建议还是补上去吧。

weixin_45223454的博客 1229

MYSQL常用的存储引擎介绍

MYSQL常用的存储引擎介绍

qq_21142893的博客 121

某瓜数据app 获取达人直播商品信息接口 Sign

某瓜数据app 获取达人直播商品列表接口 Sign

自成背后的博客 6038

CAPL编程规范与最佳实践

通过本文的学习,读者应该对CAPL编程规范与最佳实践有了初步的了解,并能够编写高质量的CAPL脚本。在实际项目中,CAPL的应用非常广泛,希望读者能够通过不断的学习和实践,掌握更多的CAPL技巧,提高自己的开发能力。

闲人编程的博客 1747

Mysql存储引擎特性总结

几个常用存储引擎的特点 下面我们重点介绍几种常用的存储引擎并对比各个存储引擎之间的区别和推荐使用方式。 特点MyisamBDBMemoryInnoDBArchive 存储限制 没有 没有 有 64TB 没有 事务安全 支持 支持 锁机制 表锁 页锁 表锁 行锁 行锁 B树索引 支持 支持 支持...

anghuob40177的博客 188

【YoloV12改进策略】基于流形约束超连接(mHC)增强YoloV12全局特征提取能力_独家复现_梁文峰署名论文

论文标题:流形约束超连接 (Manifold-Constrained Hyper-Connections, mHC)核心问题:针对超连接 (Hyper-Connections, HC) 扩展残差流宽度时破坏恒等映射、引发训练不稳定性和高内存开销的问题,提出一种约束性框架。目标:恢复残差连接的稳定性与可扩展性,同时保持HC的性能增益。基准模型:基于DeepSeek-V3的MoE架构,进行了3B、9B、27B模型的实验验证。论文图示mHC 是一个通用的HC扩展框架。

m0_47867638的博客 1352

mysql 存储引擎的特性_Mysql存储引擎特性总结

几个常用存储引擎的特点下面我们重点介绍几种常用的存储引擎并对比各个存储引擎之间的区别和推荐使用方式。特点MyisamBDBMemoryInnoDBArchive存储限制没有没有有64TB没有事务安全支持支持锁机制表锁页锁表锁行锁行锁B树索引支持支持支持支持哈希索引支持支持全文索引支持集群索引支持数据缓存支持支持索引缓存支持支持支持数据可压缩支持支持空间使用低低N/A高非常低内存使用低低中等高低批量...

weixin_39520199的博客 107

YOLO26改进策略【YOLO和Mamba】| CVPR 2025:EfficientViM 压缩隐藏状态空间进行通道混合、单头设计减少内存操作,提升目标检测效率与精度

本文记录的是利用模块优化的目标检测网络模型。EfficientViM Block(基于隐藏状态混合器的状态空间对偶性模块) 的设计旨在,提升特征提取效率,同时兼顾全局依赖捕捉与局部细节保留。本文将深入研究的原理,并将其应用到中,通过重构特征提取流程、减少内存绑定操作、融合多阶段特征,增强模型在资源受限环境下的检测性能与速度。EfficientViM: Efficient Vision Mamba with Hidden State Mixer based State Space DualityEfficie

Limiiiing的博客 399

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

了解mysql储存引擎_MySql-了解存储引擎

怎么应对不同版本在不同的 mysql 版本中,很多特性和语法有可能是不一样的,我们怎么样才能知道当前版本的语法是什么样呢?最好的办法是学会使用 mysql 的帮助。A、按照层次看帮助例如:mysql> contents,mysql> data types,mysql> int 等等B、快速查阅帮助(如果我们需要快速查阅某项语法时,可以使用关键字进行快速查询)例如,我想知道 sho...

weixin_33680199的博客 145

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

mysql引擎特性_Mysql存储引擎特性总结

几个常用存储引擎的特点下面我们重点介绍几种常用的存储引擎并对比各个存储引擎之间的区别和推荐使用方式。特点MyisamBDBMemoryInnoDBArchive存储限制没有没有有64TB没有事务安全支持支持锁机制表锁页锁表锁行锁行锁B树索引支持支持支持支持哈希索引支持支持全文索引支持集群索引支持数据缓存支持支持索引缓存支持支持支持数据可压缩支持支持空间使用低低N/A高非常低内存使用低低中等高低批量...

weixin_33282146的博客 96

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

BVH加速结构深度解析:构建、遍历与性能优化

空间加速结构是实时渲染和物理引擎中降低求交计算量的核心手段。当场景三角形数量达到百万级,暴力遍历的性能瓶颈极为突出,而BVH(包围体层次结构)通过将几何体分层包裹,以层级包围盒提前排除不相交区域,成为光线追踪与碰撞检测的主流选择。其构建时的SAH(表面积启发式)策略通过量化划分成本平衡树的质量与遍历效率;遍历阶段借助AABB求交与近优先剪枝,可大幅减少无效访问。在动态场景中,BVH的refit/rebuild策略、内存布局优化以及GPU并行建树技术,使其兼顾实时性与稳定性。围绕设计动机、包围体选型、建树算法

weixin_34275734的博客 290

Mysql各种存储引擎的特性以及如何选择存储引擎

几个常用存储引擎的特点 下面我们重点介绍几种常用的存储引擎并对比各个存储引擎之间的区别和推荐使用方式。 特点MyisamBDBMemoryInnoDBArchive 存储限制 没有 没有 有 64TB 没有 事务安全 支持 支持 锁机制 表锁 页锁 表锁 行锁 行锁 B树索引 支持 支持 支...

weixin_30641465的博客 62

Mysql常用存储引擎介绍

一、Mysql常用存储引擎介绍 转载于:https://www.cnblogs.com/yujiemeigui/p/8120685.html

weixin_33725272的博客 73

关于MySQL存储引擎的简单学习总结

存储引擎概述 存储引擎:1.就是存储数据,建立索引,更新查询数据等等技术的实现方式 。 2.存储引擎是基于表的,而不是基于库的。所以存储引擎也可被称为表类型。 Oracle,SqlServer等数据库只有一种存储引擎。MySQL提供了插件式的存储引擎架构。所以MySQL存在多种存储引擎,常用的包含 : InnoDB 、MyISAM 、MEMORY等。可以根据需要选择相应引擎。 下面以这三种存储引擎为例,简要介绍!! InnoDB存储引擎 ...

weixin_49294578的博客 266

MySQL中的存储引擎

MySQL数据库常用的四个存储引擎的特点:

koastal的博客 356

MySQL存储引擎总结

前言 在数据库中存的就是一张张有着千丝万缕关系的表,所以表设计的好坏,将直接影响着整个数据库。而在设计表的时候,我们都会关注一个问题,使用什么存储引擎。等一下,存储引擎?什么是存储引擎? 什么是存储引擎? 关系数据库表是用于存储和组织信息的数据结构,可以将表理解为由行和列组成的表格,类似...

106

mysql 存储引擎

HTTP协议——简单认识TCP/IP协议

霸气工作室 407

mysql几种存储引擎介绍

   前言   在数据库中存的就是一张张有着千丝万缕关系的表,所以表设计的好坏,将直接影响着整个数据库。而在设计表的时候,我们都会关注一个问题,使用什么存储引擎。等一下,存储引擎?什么是存储引擎?    什么是存储引擎?     关系数据库表是用于存储和组织信息的数据结构,可以将表理解为由行和列组成的表格,类似于Excel的电子表格的形式。有的表简单,有的表复杂,有的表根本不用来存储任...

qianfeng_dashuju的博客 215
上一篇: 算法-Evaluate Division-除法求值
下一篇: 算法-Best Time to Buy and Sell Stock III-买卖股票的最佳时机III
酱油瓶啤酒杯
博客等级 码龄8年 35粉丝 135原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值