知识改变命运! java高频面试题-mysql的InnoDB与MyISAM存储引擎有哪些区别 ?_猿份哥-lskyf博客社区

java高频面试题-mysql的InnoDB与MyISAM存储引擎有哪些区别 ?

猿份哥 6月前 ⋅ 709 阅读 ⋅ 3 个赞

mysql的InnoDB与MyISAM存储引擎有哪些区别 ?

MySQL是一个广泛使用的关系型数据库管理系统,其中InnoDB和MyISAM是两种常用的存储引擎。它们在功能和性能方面存在着显著的差异。本文将对它们的区别进行整理,以便更好地了解它们的特点和适用场景。

数据存储

  • InnoDB:InnoDB使用聚集索引(clustered index)来存储数据。这意味着数据行按照主键的顺序进行物理存储。这种存储方式使得InnoDB在处理大量的插入和更新操作时更加高效。

  • MyISAM:MyISAM使用堆表(heap table)的存储方式,数据行在物理存储上是无序的。这种存储方式对于主要以查询为目的的应用程序可能更加合适。

  • InnoDB文件结构

      .frm文件:是表结构定义文件
      .ibd文件:包含了表的数据和索引。 
      此外,InnoDB还使用一个共享的表空间文件(.ibdata文件)来存储系统表和undo日志等信息。 
    
  • MyISAM文件结构

      .frm文件:是表结构定义文件。
      .MYD文件:数据文件。
      .MYI文件:存储表的索引。 
    

事务支持

  • InnoDB:InnoDB是一个支持事务的存储引擎,遵循ACID(原子性、一致性、隔离性和持久性)特性。它能处理复杂的并发操作,并提供了回滚和恢复机制。

  • MyISAM:MyISAM存储引擎不支持事务处理,主要用于读密集型的应用程序。

并发性能

  • InnoDB:InnoDB具有更好的并发性能。它支持行级锁定,允许多个事务同时访问表中的不同行,从而提高并发性。此外,InnoDB还支持多版本并发控制(MVCC),减少了锁冲突的可能性。

  • MyISAM:MyISAM只支持表级锁定,这意味着当一个事务对表执行写操作时,其他事务无法同时对表进行写操作。这可能导致并发性能下降。

可靠性

  • InnoDB:InnoDB具有更好的可靠性特性。它通过使用事务日志(transaction log)来保证数据的持久性,并提供了崩溃恢复机制,可以在数据库异常关闭后恢复到一致的状态。

  • MyISAM:MyISAM在崩溃后的恢复能力较弱,容易出现数据损坏的情况。

各自的优缺点

  • InnoDB:支持事物,支持外键,支持行锁,支持表锁。并发好

  • MyISAM:不支持事物,不支持外键,只支持表锁,查询快

应用场景

  • InnoDB:需要事务和更新操作频繁的场景。

  • MyISAM:少量插入,大量查询的场景。

综上所述,InnoDB和MyISAM存储引擎在功能和性能方面存在着明显的差异。如果应用程序需要事务支持、高并发性和数据可靠性,选择InnoDB是更好的选择。而如果应用程序主要以读操作为主,可以考虑使用MyISAM存储引擎。


全部评论: 0

    我有话说:

    面试MySQL参数innodb_flush_log_at_trx_commit什么作用?

    面试MySQL参数innodb_flush_log_at_trx_commit什么作用? innodb_flush_log_at_trx_commit是MySQLInnoDB存储引擎一个

    java高频面试-线程池中execute跟submit区别

    ``当谈论线程池时,其中execute和submit是两种常用方法,它们在任务提交和执行上有所不同。 线程池中 execute submit 方法区别 1.execute 方法

    java高频面试-Spring中Bean生命周期

    Spring中Bean生命周期如下过程: 1.Bean容器找到配置文件中Spring Bean定义。 2.Bean容器利用Java Reflection API创建一个Bean实例。 3

    java高频面试-java类加载需要经历哪些过程?

    本篇文章是基于JDK 8及以上版本Java类加载过程。 Java类加载过程 Java类加载是Java虚拟机(JVM)执行过程中关键步骤。它涉及Java动态加载、链接和初始化。在本文中,我们将

    java高频面试-Spring Boot自动配置是如何工作,以及它优点是什么?

    Spring Boot自动配置是其设计理念核心之一,它通过约定大于配置思想,为开发者提供了一种零配置开发体验。以下是对这个问题详细解答: 自动配置原理: Spring Boot通过

    java高频面试-Java如何实现序列化和反序列化?

    一.为什么要序列化? 序列化为数据持久化、远程通信、数据交换和对象复制提供了便捷解决方案。它是在不同系统间共享和传递对象一种常用方法。 几个常见原因: 持久化数据: 将对象序列化后存储在文件系统

    我向20k+以上java高级开发工程师提了那些面试问题

    公司需要一位java高级开发工程师,找到我去面试。我回忆了一下,记录部分我提问,如果大家刚兴趣可以给我留言,我视情况看是否继续补充,或者是否提供答案。 1.聊聊您对spring Boot一些见解

    java高频面试-在Spring中,当一个Bean依赖另一个Bean时,如果这两个Bean之间出现了循环依赖,Spring会如何处理呢?

    Spring 中循环依赖处理 循环依赖是指两个或多个Bean之间相互依赖,形成了相互引用关系。在Spring框架中,如果遇到循环依赖,即两个Bean互相持有对方引用,Spring框架如何处理呢

    spring boot面试及答案持续更新中

    2019-07-28最新整理spring boot面试及答案 1.Spring Boot是什么 这是摘自官方一段话 Spring Boot is designed to get you up

    MySQL中,根据加锁维度可以将锁划分为哪些类型呢?

    问题: 在MySQL中,根据加锁维度可以将锁划分为哪些类型呢? 答案: 按读写权限划分: 共享锁(Shared Locks,简称S):在事物要读取一条记录时,需要先获取该记录S锁,S锁可以在同一

    减肥---我瘦子区别

    减肥---我瘦子区别 最美艳遇是遇见更好、更优秀自己。 为什么别人总是能能控制好自己身材?瘦子和我区别哪里呢? 关于吃: 瘦子会告诉你,他们也吃很多,而且今天还吃撑了,也喝奶茶,也吃

    java程序员必须知道网站

    sping官网 spring各种框架给java开发带来便利至今无法撼动 github 各种语言项目都托管在上面,各种demo使用起来省心省力 stackoverflow 各种程序所遇到

    普通人才气女子花甲之年

    资本才能优雅老去,才能才能优雅老去。 优雅女人数不胜数,她们不一定天生丽质,闭月羞花,但一定是腹诗书气自华。普通人花甲之年和饱读诗书、有钱人花甲之年差不是一点两点。 普通人才气女子

    Java如何返回多个值

      我一个方法,需要返回多个对象。可是Java只能返回一个值,请问如何才能返回多个值呢?

    Java 平台标准版文档

    官方地址:https://docs.oracle.com/en/java/javase/index.html Java Platform, Standard Edition (Java SE) 帮助

    加入公众号
    加入公众号