`
mdxdjh2
  • 浏览: 12357 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

MyISAM 和 InnoDB 区别

阅读更多

1、MyISAM不支持事务,InnoDB是事务类型的存储引擎

2、MyISAM只支持表级锁,而InnoDB支持行级锁表级锁默认为行级锁

MyIsam -> 表锁

对于write,如果表上没有锁,则在上面绑定一个写锁,否则丢到写锁队列中。

对于read,如果表上没有锁,则在上面绑定一个读锁,否则丢到读锁队列中。

    当一个锁被释放的时候,表会先被写锁队列的线程获得,然后才是读锁队列,这意味着如果有很多更新的情况下,得等所有写锁线程执行完才能返回select的内容。

         InnoDB -> 行锁

    优点:①行级锁是Mysql中锁力度最小的,在数据量大的情况下能减少冲突的情况。

          ②回滚的时候只需要少量的更改

          ③可以长时间锁定单一行

    缺点:①行级锁需要占用更多内存

          ②相比表锁和页锁需要绑定更多的锁

          ③执行效率上会比表锁和行级锁慢

          ④行级锁会导致死锁

    原因分析:

          行级锁锁定的是索引。索引分为主键索引和非主键索引。当操作的是主键索引,则会直接锁定主键索引。当操作的是非主键索引,则会先去锁定非主键索引,然后再锁定主键索引。

    举例:

    表A:(Id,State,Time) 主键索引Id、非主键索引State

    当一个SQL 执行 Update A set State = 1 Where State = 2;时,会锁定State的索引,然后请求锁定主键索引Id.

    而同时另一个SQL 执行 Update A set State = 2 Where Id = 1;会锁定Id索引,由于修改的又是State = 2的数据,同时也会请求锁定State的索引。这样彼此相互等待着,就会导致死锁产生。

 

3、MyISAM不支持外键,InnoDB支持外键

4、MyISAM引擎的表在高并发的情况下容易造成损坏

   恢复方式:可以使用Mysql自带的myisamchk工具: myisamchk -r tablename 或者 myisamchk -o tablename(比前面的更保险) 对表进行修复

   损坏原因:服务器突然断电导致数据文件损坏、mysqld进程在写入的时候被kill了、磁盘故障...

 

5、MyISAM保存count(*)的值,InnoDB需要每次扫描全表统计

6、MyISAM支持全文索引(FULLTEXT),InnoDB不支持

7、MyISAM引擎的表的查询、更新、插入的效率要比InnoDB高

   对于数据量不大,百万级别,写少的用MyISAM比较适合。

   对于数据量大,读写多,用InnoDB适合,InnoDB适合管理。

 

 

 

分享到:
评论

相关推荐

    MyISAM和InnoDB的异同

    #### MyISAM与InnoDB的主要区别 1. **事务处理**: - MyISAM不支持事务,而InnoDB则支持ACID事务。 - 如果应用程序需要事务支持来保证数据的一致性和可靠性,应选择InnoDB。 2. **并发处理**: - MyISAM使用表...

    MyISAM引擎与InnoDB引擎性能的对比

    MySQL数据库系统提供了多种存储引擎,其中最常用的两种是MyISAM和InnoDB。它们各自具有独特的特性和适用场景,理解二者的性能差异对于优化数据库设计至关重要。 MyISAM引擎是MySQL早期的默认存储引擎,以其高速度和...

    8.MySQL存储引擎--MyISAM与InnoDB区别1

    MySQL存储引擎--MyISAM与InnoDB区别 MySQL是一种关系型数据库管理系统,它支持多种存储引擎,每种存储引擎都有其特点和优缺。MyISAM和InnoDB是MySQL中最常用的两种存储引擎,它们都有其优缺点,本文将对比MyISAM...

    MySQL存储引擎中的MyISAM和InnoDB区别详解

    在使用MySQL的过程中对MyISAM和InnoDB这两个概念存在了些疑问,到底两者引擎有何分别一直是存在我心中的疑问。为了解开这个谜题,搜寻了网络,找到了如下信息: MyISAM是MySQL的默认数据库引擎(5.5版之前),由...

    myisam与innodb 区别 值得下载

    自己总结的 关于mysql存储引擎myisam innodb 的比较 两者区别 对面试会很有帮助

    MyISAM InnoDB 区别

    MyISAM InnoDB 区别 InnoDB和MyISAM是许多人在使用MySQL时最常用的两个表类型,这两个表类型各有优劣,视具体应用而定。基本的差别为:MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持。MyISAM类型的表强调的...

    myisam和innodb的区别

    ### MySQL存储引擎详解:MyISAM与InnoDB的主要区别 #### 一、概述 MySQL作为一款广泛使用的开源关系型数据库管理系统,提供了多种存储引擎供用户根据不同的应用场景选择。其中最常用的两种存储引擎分别是MyISAM和...

    数据库引擎 MyISAM 和 InnoDB 对比

    ### 数据库引擎 MyISAM 和 InnoDB 的对比分析 在MySQL数据库系统中,MyISAM与InnoDB是最常被提及的两种存储引擎。这两种引擎在功能、性能以及适用场景上存在显著差异,本文将深入探讨这两者之间的区别,并分析它们...

    MyISAM与InnoDB的索引差异

    在MyISAM中,主键索引和普通索引之间并没有本质的区别。如果表中没有定义主键,MyISAM会选择一个唯一且非空的列作为隐含主键。由于索引和数据分离,进行查询时,系统需要先通过索引找到指针,然后根据指针对数据行...

    68.选择合适的数据库引擎和myisam和innodb的主要区别?.avi

    mysql数据库 选择合适的数据库引擎和myisam和innodb的主要区别

    MyISAM和InnoDB索引引擎的B+树索引实现1

    本文主要讨论两种常见的存储引擎——MyISAM和InnoDB,它们在B+树索引实现上的差异。 首先,MyISAM是MySQL早期的默认存储引擎,它在索引方面采用B+树结构。对于主键索引,MyISAM的B+树叶节点存储的是数据记录的物理...

    mysql DB引擎myisam与innodB

    1. **数据处理方式**:InnoDB 和 MyISAM 在数据处理方面存在本质的区别。InnoDB 是一种行级锁定的存储引擎,支持事务处理,并且为每行记录都保存一个行锁,这使得它在高并发环境下的表现更佳。而 MyISAM 使用的是表...

    MySQL存储引擎中MyISAM和InnoDB区别详解

    MyISAM和InnoDB是MySQL中两种最常使用的存储引擎,它们各有特点,适用于不同的应用场景。 1. **事务处理**: - **InnoDB** 支持ACID(原子性、一致性、隔离性、持久性)事务,提供事务安全,适合需要事务处理的...

    MySQL存储引擎MyISAM与InnoDB区别总结整理

    在MySQL中,MyISAM和InnoDB是最常见的两种存储引擎,它们各自有独特的特性和适用场景。 首先,我们来看一下MySQL默认存储引擎的变迁。在MySQL 5.1之前的版本,MyISAM是默认的存储引擎,它以快速读取和较小的内存...

    MyISAM,InnoDB存储引擎1

    其中,MyISAM和InnoDB是最常用的两种存储引擎,各有其特点和适用场景。 MyISAM存储引擎是MySQL早期的默认引擎,以高速存储和检索以及全文搜索能力著称。在MyISAM中,每个表由三个物理文件组成:.frm存储表定义,....

    Mysql 的存储引擎,myisam和innodb的区别

    主要介绍了Mysql 的存储引擎,myisam和innodb的区别,需要的朋友可以参考下

Global site tag (gtag.js) - Google Analytics