首页 > 其他分享 >为什么InnoDB不像MyISAM那样维护一个预存储的行数计数器?

为什么InnoDB不像MyISAM那样维护一个预存储的行数计数器?

时间:2023-08-16 16:58:34浏览次数:32  
标签:事务 MyISAM 计数器 InnoDB 行数 维护

  InnoDB 和 MyISAM 有不同的设计哲学和用途,这影响了它们如何维护和管理行数。以下是为什么 InnoDB 不像 MyISAM 那样维护一个预存储的行数计数器的原因:

  1. 事务支持:InnoDB 是一个事务型存储引擎,支持ACID事务。在任何给定时间,多个事务可能都在同一个表上进行操作,这使得持续维护一个准确的行数计数器变得复杂和开销巨大。例如,如果两个事务同时删除行,然后一个事务被提交而另一个被回滚,行数计数器将需要被正确地更新,这会增加复杂性和性能开销。

  2. MVCC(多版本并发控制):InnoDB 使用 MVCC 来支持高并发,这意味着在任何给定时间,不同的事务可能会看到表的不同版本。为了支持这种并发模型,维护一个全局的、始终准确的行数计数器是非常具有挑战性的。

  3. 锁定机制:InnoDB 支持行级锁定,而 MyISAM 只支持表级锁定。行级锁定允许更高的并发,但它也意味着更多的行正在被并发修改,这使得持续跟踪准确的行数更加困难。

  4. 恢复和崩溃安全性:InnoDB 的设计注重数据的完整性和恢复能力。如果维护一个始终准确的行数计数器,那么在崩溃和恢复期间还需要确保这个计数器的准确性,这会增加恢复过程的复杂性。

  5. 设计目标:InnoDB 和 MyISAM 有不同的设计目标。MyISAM 为读密集的工作负载进行了优化,而 InnoDB 更注重写操作和事务完整性。维护一个准确的行数计数器对 MyISAM 更有意义,因为它经常用于快速读取操作,而不是复杂的事务。

最后,尽管 InnoDB 不维护一个全局的行数计数器,但它确实在每个索引中维护一个近似的行数,这可以用于查询优化和其他内部操作。但这个值是近似的,并不保证总是完全准确的。

标签:事务,MyISAM,计数器,InnoDB,行数,维护
From: https://www.cnblogs.com/shamo89/p/17635527.html

相关文章

  • 为什么MySQL innodb的数据达到亿级别,使用‘select count(*) ’将会特别慢?
    当表的数据达到亿级别时,使用SELECTCOUNT(*)FROMtable会变得特别慢,主要是因为以下几个原因:全表扫描:SELECTCOUNT(*)FROMtable通常会导致全表扫描,除非有一些优化手段被应用(例如使用覆盖索引)。当你执行这样的查询,数据库实际上需要读取表中的每一行以计算总......
  • 使用Pandas进行数据清理的入门示例
    数据清理是数据分析过程中的关键步骤,它涉及识别缺失值、重复行、异常值和不正确的数据类型。获得干净可靠的数据对于准确的分析和建模非常重要。本文将介绍以下6个经常使用的数据清理操作:检查缺失值、检查重复行、处理离群值、检查所有列的数据类型、删除不必要的列、数据不一......
  • InnoDB 内存结构
    目录InnoDB架构概念pagepagesizeInnoDB内存架构BufferPool缓冲池LRU算法缓冲池配置ChangeBuffer配置变更缓冲innodb_change_bufferinginnodb_change_buffer_max_sizechangeBuffer的适用场景自适应哈希索引LogBufferInnoDB磁盘架构表索引表空间双写缓冲区RedoLogUndoL......
  • InnoDB 的介绍
    目录InnoDB的主要优势使用InnoDB表的好处InnoDB表的最佳实践验证InnoDB是否为默认存储引擎InnoDB的主要优势InnoDB的主要优势:其DML操作遵循ACID模型,事务具有提交、回滚和崩溃恢复功能,以保护用户数据。行级锁定和Oracle风格的一致性读取提高了多用户并发性和......
  • 同时忽略错误值与隐藏行,进行数据汇总!
    1职场实例今天有位小伙伴咨询问到这样的一个Excel办公实例问题:如何同时忽略错误值与隐藏行(或筛选行),进行数据汇总!如下图所示:A列为日期列,B列为每天的销售量数据,我们发现B列的销售量数据有些是以错误值的形式来显示的。并且有些销售量数据单元格所在的行进行了整行隐藏操作。我们想要......
  • PHP处理建行数币支付的几种情况
    一、支付时,验签MAC参数生成原理:$A="MERCHANTID=105002653991975&POSID=042166601&BRANCHID=322000000&ORDERID=202201241515557833&PAYMENT=0.01&CURCODE=01&TXCODE=HT0000&REMARK1=bill&REMARK2=&RETURNTYPE=1&TIMEOUT=";//根据接......
  • 批量将n行数据用双引号括起来并用逗号连接成一行数据
    1、我们要达到的效果:批量将n行数据转换成格式"xxx","xxx","xxx"如批量将下面3行转换成格式"40000007","40000008","40000362",行数少的时候可以一个个修改,但是行数一多就无法快速更改。下面将介绍一个方法只需2步(替换、首末补充)完成批量转换n行 2、以下将用到文本工具Notepad+......
  • mysql配置my.cnf包含innodb配置详解
    1.#以下选项会被MySQL客户端应用读取。2.#注意只有MySQL附带的客户端应用程序保证可以读取这段内容。3.#如果你想你自己的MySQL应用程序获取这些值。4.#需要在MySQL客户端库初始化的时候指定这些选项。5.6.#7.[client]8.#password=[your_passwo......
  • 使用Entity Framework Core进行数据库操作
    当使用EntityFrameworkCore(EFCore)进行数据库操作时,你需要首先设置数据库上下文(DbContext),定义实体类(Entity),然后通过上下文来执行CRUD(创建、读取、更新和删除)操作。下面是一个简单的示例,演示如何使用EFCore进行数据库操作。安装EFCoreNuGet包:首先,你需要在项目中安装Entity......
  • mysql突然断电,无法启动问题, redo log 无法恢复 mysqld启动不了 Plugin 'InnoDB' init
    环境:CentOS7.x、MySQL5.7其实造成这种问题的原因有很多种,但是不管是什么问题,最终的原因一般是redolog造成的问题。为什么说是redolog造成的呢,因为redolog对应的文件就是两个ib_logfile开头的文件:ib_logfile0、ib_logfile1;下面的问题都是和ib_logfile有关。MySQL......