数码资讯
MySQL存储引擎比较的详细解决方案
MyISAM是mysql.myisam默认存储引擎不支持事务,不支持外键,但其访问速度快,不需要事务的完整性。 InnoDB存储引擎提供了交易安全与提交、回滚功能,和崩溃恢复。但相比MyISAM存储引擎,INNODB写的效率较低,需要更多的磁盘空间来保存数据和指标。 内存存储引擎使用内存的内容来创建
选购提示
关注价格、性能、续航、售后和真实使用场景,理性比较后再下单。
MyISAM是mysql.myisam默认存储引擎不支持事务,不支持外键,但其访问速度快,不需要事务的完整性。
InnoDB存储引擎提供了交易安全与提交、回滚功能,和崩溃恢复。但相比MyISAM存储引擎,INNODB写的效率较低,需要更多的磁盘空间来保存数据和指标。
内存存储引擎使用内存的内容来创建表。每个内存表实际上对应于一个磁盘文件。表访问的内存类型非常快,因为它的数据在内存中,默认情况下使用哈希索引。但是一旦服务关闭,表中的数据将丢失。
合并存储引擎是一组的组合的MyISAM表,在结构上必须是完全相同的。合并表本身没有数据,并运行查询,更新,和删除合并类型表是MyISAM表进行内部。
MyISAM表还支持3种不同的存储格式:
1静态表
2动态表
3压缩表
静态表是默认的存储格式。静态表中的字段都是非变量字段。其优点是存储速度快、易缓存、易恢复,缺点是占用的空间通常比动态表占用的空间多(注意:在存储中,当列的宽度不够时,它充满了空间,并且在访问的时候空间是不可用的)。
动态表的字段较长。其优点是占用的空间相对较小。然而,频繁地更新和删除记录会产生碎片,这就需要定期改进性能,而失败时恢复相对困难。
压缩表占用的磁盘空间很小,每个记录都是单独压缩的,因此访问的成本很小。
MySQL InnoDB存储引擎只支持外键。创建外键时,表必须具有相应的索引,子表在创建外键时会自动创建相应索引。
有两种类型的InnoDB存储:1使用共享表空间存储2使用多个表空间
记忆型存储引擎主要用于代码表,不要经常变动,或作为统计操作的中间结果表,以便于分析中间结果有效并得到最终的统计结果。要谨慎更新存储引擎的表,因为数据没有写入磁盘,所以我们必须考虑如何下次重新启动服务后得到的修正数据。
合并是用来将一系列等价MyISAM表的逻辑,并引用它作为一个对象,合并表的优势在于它可以打破一个MyISAM表大小的限制。通过在多个磁盘上分配不同的表,可以有效地提高合并表的访问效率。
为了适应不同的环境,MySQL提供了多种不同的存储引擎(存储引擎)在这层的应用开发中,开发者可以选择存储引擎解决方案根据不同的要求,更灵活,你可以根据每个表的特性来存储数据,选择不同的存储引擎,也就是说,在一个MySQL数据库,你可以混合不同的存储引擎
首先,一眼瞥见的MySQL的架构,在最高层次的抽象,可以用Garlan Shaw的分层结构的代表(左)。
应用层为所有RDBMS用户提供用户界面。逻辑层包括所有核心功能,物理层负责在硬件设备上存储数据。
图右侧更具体地描述逻辑层的组成。MySQL逻辑层由查询处理子系统、事务管理子系统、恢复管理子系统和存储管理子系统组成,相信存储引擎的位置是存储管理,存储引擎是存储管理子系统的一部分。
为了使这个想法更清楚,这里有一个更全面的体系结构图(或者更具体地说是流程图,只是忽略反馈)。
从一个非官方的上述三张图片(100%正确不能保证)的MySQL的报告系统的结构,高性能MySQL通常和一书的MySQL结构(以下,基本对应于逻辑层,从第一幅图片的右边可以看到MySQL逻辑层也跟着分层体系结构)是完全一致的。
上述图中第二层和第三层之间的接口不是任何存储引擎的单一API。它由20个基本相似的启动事务组成,它们返回到结果集和其他函数,存储引擎不处理SQL,它们不互相通信,它们的任务仅仅是响应来自高层的请求。
存储引擎的一些特性
上述四种存储引擎各有其各自的适用环境,主要体现在性能、事务、并发控制、参考完整性、缓存、故障恢复、备份和存储等方面。
目前流行的存储引擎是MyISAM和InnoDB,而MyISAM正是大多数Web应用程序的首选。MyISAM和InnoDB的主要区别在于性能和事务控制。
MyISAM是ISAM(索引顺序存取方法的早期,我现在用的MySQL5.0不支持ISAM)延伸的ISAM是专为处理,阅读频率远高于写这种情况的频率,所以ISAM和后来的MyISAM没有考虑事情的支持,包括TPM,不需要事务记录的查询效率是相当大的,小的足迹。在继承这些优点,MyISAM提供了大量实用的新功能和与时间相关的工具。例如,考虑并发控制,表级锁提供,虽然MyISAM本身不支持容错,它可以恢复通过myisamchk,因为MyISAM使用独立存储的F(MYD和MYI文件数据文件索引文件)为每个表,使得备份和恢复非常方便(复印件、盖),而且还支持在线恢复。
所以如果你的应用程序不需要交易和处理基本的CRUD操作,那么MyISAM是一种选择。
InnoDB是适用于高并发读写。MVCC(多版本并发控制)和行级锁是用来提供符合ACID.InnoDB交易支持支持外键参照完整性和恢复故障的能力。此外,InnoDB性能很好。尤其是在处理大数据的情况下,官方的说法是,InnoDB CPU效率不与其他基于磁盘的关系数据库存储引擎。然而,备份和恢复InnoDB是个小麻烦。除非你使用的版本4.1提供的多表支持,因为InnoDB和MyISAM是不同的,他们的数据文件并不是相互独立的表,而不是使用一个共享表空间,一个简单的拷贝覆盖方法对他不适用,必须停止后恢复使用MySQL。每台tablespacesd使每个表对应一个独立的表空间文件是一个简单的多。
总的来说,InnoDB是如果事务支持是必需的,出现频率较高的并发读写的一个很好的选择。如果并发读写频率不高,BDB可以考虑,但BDB支持将不再是MySQL5.1及其以后的版本中提供。这不是选择。
至于堆和BDB(伯克利DB),相对而言,知名度不如前两家,但在某些情况下,它仍然是适用的。
堆存储引擎是存储在内存中的数据,而且速度非常快,因为没有等待磁盘I / o.but因为内存存储引擎,任何变化都将在服务器重新启动后消失。
堆适合测试。
BDB是第一安全交易的MySQL存储引擎。基于同样的交易安全伯克利DB数据库,而BDB的普及率不及InnoDB,因为大多数的MySQL存储引擎支持事务的搜索的同时寻找支持MVCC或行级锁定的存储引擎,而BDB只支持页级锁。
高性能MySQL中每个存储引擎的特征表
属性
MyISAM
堆
BDB
InnoDB
交易
不
不
是的
是的
锁粒度
表
表
页面(8 KB)
排
保管部
分割文件
在记忆中
每桌一个文件
表空间(s)
隔离级别
没有
没有
提交读
所有
便携式格式
是的
N/A
不
是的
参照完整性
不
不
不
是的
带数据的主键
不
不
是的
是的
MySQL缓存数据记录
不
是的
是的
是的
可利用性
所有版本
所有版本
MySQL的max
所有版本
InnoDB存储引擎提供了交易安全与提交、回滚功能,和崩溃恢复。但相比MyISAM存储引擎,INNODB写的效率较低,需要更多的磁盘空间来保存数据和指标。
内存存储引擎使用内存的内容来创建表。每个内存表实际上对应于一个磁盘文件。表访问的内存类型非常快,因为它的数据在内存中,默认情况下使用哈希索引。但是一旦服务关闭,表中的数据将丢失。
合并存储引擎是一组的组合的MyISAM表,在结构上必须是完全相同的。合并表本身没有数据,并运行查询,更新,和删除合并类型表是MyISAM表进行内部。
MyISAM表还支持3种不同的存储格式:
1静态表
2动态表
3压缩表
静态表是默认的存储格式。静态表中的字段都是非变量字段。其优点是存储速度快、易缓存、易恢复,缺点是占用的空间通常比动态表占用的空间多(注意:在存储中,当列的宽度不够时,它充满了空间,并且在访问的时候空间是不可用的)。
动态表的字段较长。其优点是占用的空间相对较小。然而,频繁地更新和删除记录会产生碎片,这就需要定期改进性能,而失败时恢复相对困难。
压缩表占用的磁盘空间很小,每个记录都是单独压缩的,因此访问的成本很小。
MySQL InnoDB存储引擎只支持外键。创建外键时,表必须具有相应的索引,子表在创建外键时会自动创建相应索引。
有两种类型的InnoDB存储:1使用共享表空间存储2使用多个表空间
记忆型存储引擎主要用于代码表,不要经常变动,或作为统计操作的中间结果表,以便于分析中间结果有效并得到最终的统计结果。要谨慎更新存储引擎的表,因为数据没有写入磁盘,所以我们必须考虑如何下次重新启动服务后得到的修正数据。
合并是用来将一系列等价MyISAM表的逻辑,并引用它作为一个对象,合并表的优势在于它可以打破一个MyISAM表大小的限制。通过在多个磁盘上分配不同的表,可以有效地提高合并表的访问效率。
为了适应不同的环境,MySQL提供了多种不同的存储引擎(存储引擎)在这层的应用开发中,开发者可以选择存储引擎解决方案根据不同的要求,更灵活,你可以根据每个表的特性来存储数据,选择不同的存储引擎,也就是说,在一个MySQL数据库,你可以混合不同的存储引擎
首先,一眼瞥见的MySQL的架构,在最高层次的抽象,可以用Garlan Shaw的分层结构的代表(左)。
应用层为所有RDBMS用户提供用户界面。逻辑层包括所有核心功能,物理层负责在硬件设备上存储数据。
图右侧更具体地描述逻辑层的组成。MySQL逻辑层由查询处理子系统、事务管理子系统、恢复管理子系统和存储管理子系统组成,相信存储引擎的位置是存储管理,存储引擎是存储管理子系统的一部分。
为了使这个想法更清楚,这里有一个更全面的体系结构图(或者更具体地说是流程图,只是忽略反馈)。
从一个非官方的上述三张图片(100%正确不能保证)的MySQL的报告系统的结构,高性能MySQL通常和一书的MySQL结构(以下,基本对应于逻辑层,从第一幅图片的右边可以看到MySQL逻辑层也跟着分层体系结构)是完全一致的。
上述图中第二层和第三层之间的接口不是任何存储引擎的单一API。它由20个基本相似的启动事务组成,它们返回到结果集和其他函数,存储引擎不处理SQL,它们不互相通信,它们的任务仅仅是响应来自高层的请求。
存储引擎的一些特性
上述四种存储引擎各有其各自的适用环境,主要体现在性能、事务、并发控制、参考完整性、缓存、故障恢复、备份和存储等方面。
目前流行的存储引擎是MyISAM和InnoDB,而MyISAM正是大多数Web应用程序的首选。MyISAM和InnoDB的主要区别在于性能和事务控制。
MyISAM是ISAM(索引顺序存取方法的早期,我现在用的MySQL5.0不支持ISAM)延伸的ISAM是专为处理,阅读频率远高于写这种情况的频率,所以ISAM和后来的MyISAM没有考虑事情的支持,包括TPM,不需要事务记录的查询效率是相当大的,小的足迹。在继承这些优点,MyISAM提供了大量实用的新功能和与时间相关的工具。例如,考虑并发控制,表级锁提供,虽然MyISAM本身不支持容错,它可以恢复通过myisamchk,因为MyISAM使用独立存储的F(MYD和MYI文件数据文件索引文件)为每个表,使得备份和恢复非常方便(复印件、盖),而且还支持在线恢复。
所以如果你的应用程序不需要交易和处理基本的CRUD操作,那么MyISAM是一种选择。
InnoDB是适用于高并发读写。MVCC(多版本并发控制)和行级锁是用来提供符合ACID.InnoDB交易支持支持外键参照完整性和恢复故障的能力。此外,InnoDB性能很好。尤其是在处理大数据的情况下,官方的说法是,InnoDB CPU效率不与其他基于磁盘的关系数据库存储引擎。然而,备份和恢复InnoDB是个小麻烦。除非你使用的版本4.1提供的多表支持,因为InnoDB和MyISAM是不同的,他们的数据文件并不是相互独立的表,而不是使用一个共享表空间,一个简单的拷贝覆盖方法对他不适用,必须停止后恢复使用MySQL。每台tablespacesd使每个表对应一个独立的表空间文件是一个简单的多。
总的来说,InnoDB是如果事务支持是必需的,出现频率较高的并发读写的一个很好的选择。如果并发读写频率不高,BDB可以考虑,但BDB支持将不再是MySQL5.1及其以后的版本中提供。这不是选择。
至于堆和BDB(伯克利DB),相对而言,知名度不如前两家,但在某些情况下,它仍然是适用的。
堆存储引擎是存储在内存中的数据,而且速度非常快,因为没有等待磁盘I / o.but因为内存存储引擎,任何变化都将在服务器重新启动后消失。
堆适合测试。
BDB是第一安全交易的MySQL存储引擎。基于同样的交易安全伯克利DB数据库,而BDB的普及率不及InnoDB,因为大多数的MySQL存储引擎支持事务的搜索的同时寻找支持MVCC或行级锁定的存储引擎,而BDB只支持页级锁。
高性能MySQL中每个存储引擎的特征表
属性
MyISAM
堆
BDB
InnoDB
交易
不
不
是的
是的
锁粒度
表
表
页面(8 KB)
排
保管部
分割文件
在记忆中
每桌一个文件
表空间(s)
隔离级别
没有
没有
提交读
所有
便携式格式
是的
N/A
不
是的
参照完整性
不
不
不
是的
带数据的主键
不
不
是的
是的
MySQL缓存数据记录
不
是的
是的
是的
可利用性
所有版本
所有版本
MySQL的max
所有版本
声明:本文内容用于数码产品信息整理与选购参考,具体价格、库存、售后政策以官方渠道和电商页面实时信息为准。