InnoDB 与 MYISAM的区别和联系

 

一、存储引擎是什么?html

  MySQL中的数据用各类不一样的技术存储在文件(或者内存)中。这些技术中的每一种技术都使用不一样的存储机制、索引技巧、锁定水平而且最终提供普遍的不一样的功能和能力。经过选择不一样的技术,你可以得到额外的速度或者功能,从而改善你的应用的总体功能。这些不一样的技术以及配套的相关功能在MySQL中被称做存储引擎(也称做表类型)。MySql默认配置了许多不一样的存储引擎,能够预先设置或者在MySql服务器中启用。mysql

二、MYSQL支持的数据引擎sql

  MyISAM:默认的MySQL插件式存储引擎,它是在Web、数据仓储和其余应用环境下最常使用的存储引擎之一。数据库

  InnoDB:用于事务处理应用程序,具备众多特性,包括ACID事务支持。安全

  BDB:可替代InnoDB的事务引擎,支持COMMIT、ROLLBACK和其余事务特性。服务器

  Memory:将全部数据保存在RAM中,在须要快速查找引用和其余相似数据的环境下,可提供极快的访问。并发

  Merge:容许MySQL DBA或开发人员将一系列等同的MyISAM表以逻辑方式组合在一块儿,并做为1个对象引用它们。对于诸如数据仓储等VLDB环境十分适合。分布式

  Archive:为大量不多引用的历史、归档、或安全审计信息的存储和检索提供了完美的解决方案。post

  Federated:可以将多个分离的MySQL服务器连接起来,从多个物理服务器建立一个逻辑数据库。十分适合于分布式环境或数据集市环境。性能

  Cluster/NDB:MySQL的簇式数据库引擎,尤为适合于具备高性能查找要求的应用程序,这类查找需求还要求具备最高的正常工做时间和可用性。

  Other:其余存储引擎包括CSV(引用由逗号隔开的用做数据库表的文件),Blackhole(用于临时禁止对数据库的应用程序输入),以及Example引擎(可为快速建立定制的插件式存储引擎提供帮助)。

三、启动InnoDB引擎的方法

  Mysql中默认的是MyISAM数据引擎,惋惜此引擎不支持事务处理,咱们须要将默认的数据引擎改成InnoDB。其中InnoDB和BerkeleyDB支持事务处理,只是默认的状况下都是被disable的。全部的引擎里面,InnoDB性能最强大,算是商业级的。启动InnoDB引擎的方法以下

  1)关闭mysql的服务

  2)修改my.ini

  将default-storage-engine=INNODB前的注释(#)去掉

  将skip-innodb这行注释(加上#)

  3)保存后重启mysql服务

四、MyISAM引擎和InnoDB引擎的基本差异

  1) Innodb引擎

Innodb引擎提供了对数据库ACID事务的支持,而且实现了SQL标准的四种隔离级别。该引擎还提供了行级锁和外键约束,它的设计目标是处理大容量数据库系统,它自己其实就是基于MySQL后台的完整数据库系统,MySQL运行时Innodb会在内存中创建缓冲池,用于缓冲数据和索引。可是该引擎不支持FULLTEXT类型的索引,并且它没有保存表的行数,当SELECT COUNT(*) FROM TABLE时须要扫描全表。当须要使用数据库事务时,该引擎固然是首选。因为锁的粒度更小,写操做不会锁定全表,因此在并发较高时,使用Innodb引擎会提高效率。可是使用行级锁也不是绝对的,若是在执行一个SQL语句时MySQL不能肯定要扫描的范围,InnoDB表一样会锁全表。

  2)MyIASM引擎 

MyIASM是MySQL默认的引擎,可是它没有提供对数据库事务的支持,也不支持行级锁和外键,所以当INSERT(插入)或UPDATE(更新)数据时即写操做须要锁定整个表,效率便会低一些。不过和Innodb不一样,MyIASM中存储了表的行数,因而SELECT COUNT(*) FROM TABLE时只须要直接读取已经保存好的值而不须要进行全表扫描。若是表的读操做远远多于写操做且不须要数据库事务的支持,那么MyIASM也是很好的选择。

   3)主要区别:

  • MyIASM是非事务安全的,而InnoDB是事务安全的
  • MyIASM锁的粒度是表级的,而InnoDB支持行级锁
  • MyIASM支持全文类型索引,而InnoDB不支持全文索引
  • MyIASM相对简单,效率上要优于InnoDB,小型应用能够考虑使用MyIASM
  • MyIASM表保存成文件形式,跨平台使用更加方便

   4)应用场景:

  • MyIASM管理非事务表,提供高速存储和检索以及全文搜索能力,若是再应用中执行大量select操做,应该选择MyIASM
  • InnoDB用于事务处理,具备ACID事务支持等特性,若是在应用中执行大量insert和update操做,应该选择InnoDB

  这些区别可以影响应用程序的性能和功能,所以你必须针对业务类型来选择合适的引擎,才能最大的发挥MySQL的性能优点。

 

转自:http://www.cnblogs.com/aspirant/p/6920880.html

相关文章
相关标签/搜索