MyISAM和InnoDB区别关联详解

Mysql架构
什么存储引擎
MySQL和InnoDB对比1.2
总结

Mysql存储架构

在这里插入图片描述
从上图可以发现,MySQL由以下几部分组成:
连接池组件
管理服务和工具组件
SQL接口组件
查询分析器组件
优化器组件
缓冲(Cache) 组件
插件式存储引擎
物理文件

为什么会有存储引擎

    进程实现数据处理时,是不可能直接访问磁盘上的数据的,因为它没有权限,只有让内核来把它所访问的数据加载至内存中以后,进程在内存中完成修改,由内核再负责把数据存回磁盘 ,整个存取过程,尤其是访问比较热点的数据,也不可能每一次当用户访问时或当某SQL语句用到时再临时从磁盘加载到内存中.这样效率较低

存储引擎简单功用

    存储引擎负责把具体分析的结果完成对磁盘上文件路径访问的转换,数据库中的行数据都是存储在磁盘块上的,因此存储引擎要把数据库数据映射为磁盘块,并把磁盘块加载至内存中,把频繁访问到的热点数据,统统装入内存,用户访问、修改时直接在内存中操作,只不过周期性的写入磁盘上而已
需要特备注意的是,存储引擎是基于表的而不是数据库

MySQL和InnoDB对比1

    mysql是插件式存储引擎,它就能够替换使用选择多种不同的引擎,MyISAM是MySQL 经典的存储引擎
之一,InnoDB是innobase提供给MySQL的
在这里插入图片描述
注:

2.仅当使用压缩行格式时,才支持压缩MyISAM表。 在MyISAM中使用压缩行格式的表是只读的。

3.通过加密功能在服务器中实现。

4.通过加密功能在服务器上实现; 在MySQL 5.7和更高版本中,支持静态数据表空间加密。

6. MySQL 5.6和更高版本提供了对FULLTEXT索引的InnoDB支持。

7. MySQL 5.7和更高版本提供了InnoDB对地理空间索引的支持。

8. InnoDB在内部将哈希索引用于其自适应哈希索引功能。
InnoDB和MyISAM之间的比较2

1、InnoDB通过重放其日志从崩溃或其他意外关闭中恢复。 MyISAM必须完全扫描并修复或重建任何已更新但未完全刷新到磁盘的索引或可能的表。 由于InnoDB方法大约是固定时间,而MyISAM时间随着数据文件的大小而增长,因此随着数据库大小的增长,InnoDB提供了更高的可用性。

2、将innodb_flush_log_at_trx_commit设置为1的InnoDB在每次事务后刷新事务日志,大大提高了可靠性。MyISAM必须在完全记录的文件系统上运行,例如使用data = journal安装的ext4,以提供与数据文件损坏相同的弹性。(可以将日志放在SSD设备上以提高MyISAM性能,类似地,InnoDB日志可以放在非日志文件系统上,例如在SSD上运行的ext2,以获得类似的性能提升。在任何一种情况下都不会牺牲可靠性。)

3、InnoDB可以在可靠性较低但在某些情况下具有更高性能的模式下运行。 将innodb_flush_log_at_trx_commit设置为0将切换到在将控制权返回给调用方之前未将事务提交到磁盘的模式。 相反,磁盘刷新发生在计时器上。

I4、InnoDB会自动将多个并发I插入组合在一起并同时将它们刷新到磁盘。MyISAM依赖于文件系统块缓存来缓存对数据行和索引的读取,而InnoDB在引擎本身内执行此操作,将行缓存与索引缓存相结合。

5、如果存在,InnoDB将以主键顺序存储行,否则将存储第一个唯一键顺序。 如果选择密钥以便于常见操作,这可以明显更快。如果没有主键或唯一密钥,InnoDB将使用内部生成的唯一整数密钥,并将以粗略的插入顺序物理存储记录,如 MyISAM做到了。 或者,可以使用自动增量主键字段来实现相同的效果。

6、InnoDB为数据和索引提供可更新的LZW压缩页面存储。 MyISAM压缩表无法更新。

7、在完全符合ACID标准的模式下运行时,InnoDB必须每次事务至少对磁盘执行一次刷新,尽管它会将刷新与多个连接的插入结合起来。 对于典型的硬盘驱动器或阵列,这将限制每秒约200次更新事务。 对于需要更高事务率的应用程序,将需要具有写入缓存和备用电池的磁盘控制器,以保持事务完整性。 InnoDB还提供了几种减少这种影响的模式,自然会导致事务完整性保证的丢失,尽管仍然保留了比MyISAM更高的可靠性。 MyISAM没有这种开销,只是因为它不支持事务。

8、MyISAM使用表级锁定对任何现有行进行更新和删除,并可选择附加新行而不是锁定并将其插入可用空间。 InnoDB使用行级锁定。 对于经常更新许多行的大型数据库应用程序,行级锁定至关重要,因为单个表级锁定会显着降低数据库中的并发性。
InnoDB和MyISAM都支持全文搜索,InnoDB在MySQL 5.6.4中获得全文索引支持[5],但结果可能会有显着差异.

总结

MyISAM存储引擎适用场景
    只读(或者写较少)、表较小(可以接受长时间进行修复操作)
MyISAM引擎文件
    tbl_name.frm 表格式定义
    tbl_name.MYD 数据文件
    tbl_name.MYI 索引文件

InnoDB数据库文件
    所有InnoDB表的数据和索引放置于同一个表空间中
    表空间文件:datadir定义的目录下
数据文件:ibddata1, ibddata2, …
    每个表单独使用一个表空间存储表的数据和索引
    两类文件放在对应每个数据库独立目录中
数据文件(存储数据和索引):tb_name.ibd
    表格式定义:tb_name.frm
启用:innodb_file_per_table=ON (MariaDB 5.5以后版是默认值)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值