MySQL中的两种存储引擎MyISAM和Innodb

本文目录:

        1、概述

        2、MyISAM

        3、Innodb

        4、对比

        5、总结

1、概述

      数据库存储引擎是数据库底层软件组件,数据库管理系统使用数据引擎进行创建、查询、更新和删除数据操作。不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能,使用不同的存储引擎还可以获得特定的功能。现在许多数据库管理系统都支持多种不同的存储引擎。MySQL 的核心就是存储引擎。而且,需要注意的是,存储引擎是针对数据表进行指定的。比如,我们通过navicat连接MySQL数据库的时候,可以在设计表结构的时候发现存储引擎的选项。如下图:

通过下拉选框可以看到有多种存储引擎可以选择。所以,我们要在设计数据表的时候,根据自己的业务特点,结合各个存储引擎的优缺点,选择合适的存储引擎。

 当然我们也可以在代码创建表的时候通过type参数来指定具体的存储引擎,如下:

CREATE TABLE tblMyISAM (

id INT NOT NULL AUTO_INCREMENT,

PRIMARY KEY (id),

value_a TINYINT

) TYPE=MyISAM

 

CREATE TABLE tblISAM (

id INT NOT NULL AUTO_INCREMENT,

PRIMARY KEY (id),

value_a TINYINT

) TYPE=Innodb

 

2、MyISAM

(1)简介

      MyISAM是MySQL的默认数据库引擎(5.5版之前),由早期的 ISAM (Indexed Sequential Access Method:有索引的顺序访问方法)所改良。虽然性能极佳,而且提供了大量的特性,包括全文索引、压缩、空间函数等,但MyISAM不支持事务和行级锁,而且最大的缺陷就是崩溃后无法安全恢复。不过,5.5版本之后,MySQL引入了InnoDB数据库引擎解决了这个问题。现在大多数时候我们使用的都是InnoDB存储引擎,但是在某些情况下使用MyISAM更好,比如:MyISAM更适合读密集的表,而InnoDB更适合写密集的的表。 在数据库做主从分离的情况下,经常选择MyISAM作为主库的存储引擎。

(2)MyISAM特点

  • 不支持行锁(MyISAM只有表锁),读取时对需要读到的所有表加锁,写入时则对表加排他锁;
  • 不支持事务(所以当数据库奔溃的时候,无法完全恢复)
  • 不支持外键
  • 不支持崩溃后的安全恢复
  • 在表有读取查询的同时,支持往表中插入新纪录(读的同时,允许插入记录)
  • 支持BLOB和TEXT的前500个字符索引,支持全文索引
  • 支持延迟更新索引,极大地提升了写入性能
  • 对于不会进行修改的表,支持 压缩表 ,极大地减少了磁盘空间的占用

 

3、Innodb

(1)简介

InnoDB是MySQL的默认数据库引擎(5.5版之后)。与传统的ISAM与MyISAM相比,InnoDB的最大特色就是支持了ACID兼容的事务(Transaction)功能。如果有大量的update和insert,建议使用InnoDB,特别是针对多个并发和QPS较高的情况。

(2)特点

  • 支持行锁,采用MVCC来支持高并发,有可能死锁
  • 支持事务
  • 支持外键
  • 支持崩溃后的安全恢复
  • 不支持全文索引

 

4、对比和区别

(1)count运算上的区别: 因为MyISAM缓存有表meta-data(行数等),因此在做COUNT(*)时对于一个结构很好的查询是不需要消耗多少资源的。而对于InnoDB来说,则没有这种缓存。

(2) 是否支持事务和崩溃后的安全恢复: MyISAM 强调的是性能,每次查询具有原子性,其执行数度比InnoDB类型更快,但是不提供事务支持。但是InnoDB 提供事务支持事务,外部键等高级数据库功能。 具有事务(commit)、回滚(rollback)和崩溃修复能力(crash recovery capabilities)的事务安全(transaction-safe (ACID compliant))型表。

(3)是否支持外键: MyISAM不支持,而InnoDB支持。

(4)支持的锁粒度:MyISAM只支持表级锁,InnoDB既支持表锁也支持行锁。

 

5、总结

(1)MyISAM更适合读密集的表,而InnoDB更适合写密集的的表。 在数据库做主从分离的情况下,经常选择MyISAM作为主库的存储引擎。

(2)一般来说,如果需要事务支持,可靠性要求比较高,并且有较高的并发读取频率(MyISAM的表锁的粒度太大,所以当该表写并发量较高时,要等待的查询就会很多了),InnoDB是不错的选择。如果你的数据量很大(MyISAM支持压缩特性可以减少磁盘的空间占用),插入不频繁,查询非常频繁,或者需要做很多count 计算,而且不需要支持事务时,MyISAM是最好的选择。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值