数据库引擎InnoDB和MylSAM

MySQL引擎

MySQL中的数据用各种不同的技术存储在文件(或者内存)中。这些技术中的每一种技术都使用不同的存储机制、索引技巧、锁定水平并且最终提供广泛的不同的功能和能力。通过选择不同的技术,你能够获得额外的速度或者功能,从而改善你的应用的整体功能。
数据库引擎是用于存储、处理和保护数据的核心服务。利用数据库引擎可控制访问权限并快速处理事务,从而满足企业内大多数需要处理大量数据的应用程序的要求。使用数据库引擎创建用于联机事务处理或联机分析处理数据的关系数据库。这包括创建用于存储数据的表和用于查看、管理和保护数据安全的数据库对象(如索引、视图和存储过程)。
MySQL存储引擎主要有: MyIsam、InnoDB、Memory、Blackhole、CSV、Performance_Schema、Archive、Federated、Mrg_Myisam。
但是最常用的是InnoDB和Mylsam。

InnoDB

(1)InnoDB是一个事务型的存储引擎,有行级锁定和外键约束。
(2)Innodb引擎提供了对数据库ACID(事务四大特性)事务的支持,并且实现了SQL标准的四种隔离级别。该引擎还提供了行级锁和外键约束,它的设计目标是处理大容量数据库系统,它本身其实就是基于MySQL后台的完整数据库系统,MySQL运行时Innodb会在内存中建立缓冲池,用于缓冲数据和索引。但是该引擎不支持FULLTEXT(全文索引)类型的索引,而且它没有保存表的行数,当SELECT COUNT(*) FROM TABLE时需要扫描全表。当需要使用数据库事务时,该引擎当然是首选。由于锁的粒度更小,写操作不会锁定全表,所以在并发较高时,使用Innodb引擎会提升效率。但是使用行级锁也不是绝对的,如果在执行一个SQL语句时MySQL不能确定要扫描的范围,InnoDB表同样会锁全表。
(3)适用场景:
经常更新的表,适合处理多重并发的更新请求。
支持事务。
可以从灾难中恢复(通过bin-log日志等)。
外键约束。只有他支持外键。
支持自动增加列属性auto_increment。
(4)索引结构:
InnoDB也是B+Treee索引结构。Innodb的索引文件本身就是数据文件,即B+Tree的数据域存储的就是实际的数据,这种索引就是聚集索引。这个索引的key就是数据表的主键,因此InnoDB表数据文件本身就是主索引。
InnoDB的辅助索引数据域存储的也是相应记录主键的值而不是地址,所以当以辅助索引查找时,会先根据辅助索引找到主键,再根据主键索引找到实际的数据。所以Innodb不建议使用过长的主键,否则会使辅助索引变得过大。建议使用自增的字段作为主键,这样B+Tree的每一个结点都会被顺序的填满,而不会频繁的分裂调整,会有效的提升插入数据的效率。

Mylsam

(1)MyIASM是MySQL默认的引擎,但是它没有提供对数据库事务的支持,也不支持行级锁和外键,因此当INSERT或UPDATE数据时即写操作需要锁定整个表,效率便会低一些。MyIsam 存储引擎独立于操作系统,也就是可以在windows上使用,也可以比较简单的将数据转移到linux操作系统上去。
(2)适用场景:
不支持事务的设计,但是并不代表着有事务操作的项目不能用MyIsam存储引擎,可以在service层进行根据自己的业务需求进行相应的控制。
不支持外键的表设计。
查询速度很快,如果数据库insert和update的操作比较多的话比较适用。
整天对表进行加锁的场景。
MyISAM极度强调快速读取操作。
MyIASM中存储了表的行数,于是SELECT COUNT(*) FROM TABLE时只需要直接读取已经保存好的值而不需要进行全表扫描。如果表的读操作远远多于写操作且不需要数据库事务的支持,那么MyIASM也是很好的选择。
(3)缺点:就是不能在表损坏后主动恢复数据。
(4)索引结构:
MyISAM索引结构:MyISAM索引用的B+ tree来储存数据,MyISAM索引的指针指向的是键值的地址,地址存储的是数据。B+Tree的数据域存储的内容为实际数据的地址,也就是说它的索引和实际的数据是分开的,只不过是用索引指向了实际的数据,这种索引就是所谓的非聚集索引。

InnoDB和Mylsam的区别:

1)事务:MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持,提供事务支持以及外部键等高级数据库功能。
2)性能:MyISAM类型的表强调的是性能,其执行速度比InnoDB类型更快。
3)行数保存:InnoDB 中不保存表的具体行数,也就是说,执行select count() fromtable时,InnoDB要扫描一遍整个表来计算有多少行,但是MyISAM只要简单的读出保存好的行数即可。注意的是,当count()语句包含where条件时,两种表的操作是一样的。
4)索引存储:对于AUTO_INCREMENT类型的字段,InnoDB中必须包含只有该字段的索引,但是在MyISAM表中,可以和其他字段一起建立联合索引。MyISAM支持全文索引(FULLTEXT)、压缩索引,InnoDB不支持。
MyISAM的索引和数据是分开的,并且索引是有压缩的,内存使用率就对应提高了不少。能加载更多索引,而Innodb是索引和数据是紧密捆绑的,没有使用压缩从而会造成Innodb比MyISAM体积庞大不小。
InnoDB存储引擎完全与MySQL服务器整合,InnoDB存储引擎为在主内存中缓存数据和索引而维持它自己的缓冲池。InnoDB存储它的表&索引在一个表空间中,表空间可以包含数个文件(或原始磁盘分区)。这与MyISAM表不同,比如在MyISAM表中每个表被存在分离的文件中。InnoDB 表可以是任何尺寸,即使在文件尺寸被限制为2GB的操作系统上。
5)服务器数据备份:InnoDB必须导出SQL来备份,LOAD TABLE FROM MASTER操作对InnoDB是不起作用的,解决方法是首先把InnoDB表改成MyISAM表,导入数据后再改成InnoDB表,但是对于使用的额外的InnoDB特性(例如外键)的表不适用。
MyISAM应对错误编码导致的数据恢复速度快。MyISAM的数据是以文件的形式存储,所以在跨平台的数据转移中会很方便。在备份和恢复时可单独针对某个表进行操作。
InnoDB是拷贝数据文件、备份 binlog,或者用 mysqldump,在数据量达到几十G的时候就相对痛苦了。
6)锁的支持:MyISAM只支持表锁。InnoDB支持表锁、行锁,行锁大幅度提高了多用户并发操作的性能。但是InnoDB的行锁,只是在WHERE的主键是有效的,非主键的WHERE都会锁全表的。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: MySQL是一个开源的关系型数据库管理系统,它包含多种存储引擎,其中两种主要的是MyISAM和InnoDB。 MyISAM是MySQL最早的存储引擎,支持快速查询和全文索引,但不支持事务和外键约束。 InnoDB是MySQL最常用的存储引擎,支持事务、外键约束和行级锁定,但比MyISAM慢一些。 ### 回答2: 数据库引擎是指用于管理和操作数据库的软件模块。MySQL数据库有多个数据库引擎可供选择,其中两个常用的引擎是MyISAM和InnoDB。 MyISAM是MySQL中最早的数据库引擎之一,它采用表级锁定的概念,适合用于读密集的应用。MyISAM的特点是简单、快速,支持全文索引,适用于静态数据存储和查询。它的缺点是不支持事务,不具备ACID特性,当有大量并发写入时,性能可能下降。 InnoDB是MySQL默认的数据库引擎,它基于事务的概念,支持行级锁定和外键约束,适合用于写密集和高并发的应用。InnoDB的特点是具备ACID特性,保证数据的一致性和完整性,能够处理大量的并发写入操作。它的缺点是相对于MyISAM而言,稍微复杂一些,可能会占用更多的内存。 对于选择使用哪个数据库引擎,需要根据具体的应用场景和需求来决定。如果需要高速读取和全文搜索功能的静态数据存储和查询,可以选择MyISAM。如果需要并发写入和事务支持的应用,可以选择InnoDB。此外,如果想享受到两种引擎的优点,也可以在不同的表中使用不同的引擎。 ### 回答3: MySQL是一种流行的关系型数据库管理系统,它支持多种数据库引擎,其中两种常用的引擎是MyISAM和InnoDB。以下是对这两种引擎的回答。 MyISAM是MySQL默认的存储引擎,它在处理大量插入和查询操作时表现出色。MyISAM使用表级锁定机制,这意味着当一个查询正在操作一个表时,其他查询必须等待。虽然表级锁定可以导致并发性能问题,但对于主要是读取操作的应用程序来说,MyISAM是个非常快速的选择。此外,MyISAM不支持事务处理,这意味着如果在一个复杂的操作过程中出现错误,无法回滚到之前的状态。 InnoDB是MySQL中另一个受欢迎的存储引擎,它主要用于要求事务支持和并发性能的应用程序。InnoDB使用行级锁定机制,这意味着多个事务可以同时进行,而不会相互阻塞。此外,InnoDB支持事务处理,这是一个重要的功能,尤其是在需要确保数据完整性和一致性的应用程序中。虽然相对于MyISAM,InnoDB在处理大量插入和查询时可能稍微慢一些,但其强大的事务和并发处理功能使其在许多场景中成为首选。 综上所述,MyISAM适用于主要是读取操作的场景,对性能要求高,而InnoDB适用于需要事务支持和较高并发性能的应用程序。因此,选择合适的数据库引擎取决于具体的应用需求和性能要求。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值