Mysql数据库常用两种引擎的介绍

1.数据库引擎介绍

  MySQL数据库引擎取决于MySQL在安装的时候是如何被编译的。要添加一个新的引擎,就必须重新编译MYSQL。在MySQL数据库中,常用的引擎主要就是2个:Innodb和MyIASM。

  下面介绍这两种数据库引擎:

 (1) MyISAM:MyISAM是MySQL的ISAM扩展格式和缺省的数据库引擎。除了提供ISAM里所没有的索引和字段管理的大量功能,MyISAM还使用一种表格锁定的机制,来优化多个并发的读写操作,

 其代价是你需要经常运行OPTIMIZE TABLE命令,来恢复被更新机制所浪费的空间。MyISAM还有一些有用的扩展,例如用来修复数据库文件的MyISAMCHK工具和用来恢复浪费空间的 MyISAMPACK工具。

 MYISAM强调了快速读取操作,这可能就是为什么MySQL受到了WEB开发如此青睐的主要原因:在WEB开发中你所进行的大量数据操作都是读取  操作。所以,大多数虚拟主机提供商和INTERNET平台提供商只允许使用MYISAM格式。

 MyISAM格式的一个重要缺陷就是不能在表损坏后恢复数据。

  (2)InnoDB:InnoDB数据库引擎都是造就MySQL灵活性的技术的直接产品,这项技术就是MYSQL+API。在使用MYSQL的时候,你所面对的每一个挑战几乎都源于ISAM和MyISAM数据库引擎不支持事务处理(transaction process)也不支持外来键。

 尽管要比ISAM和  MyISAM  引擎慢很多,但是InnoDB包括了对事务处理和外来键的支持。

 

2.MyISAM与InnoDB的区别:

  InnoDB和MyISAM是许多人在使用MySQL时最常用的两个表类型,这两个表类型各有优劣,视具体应用而定。基本的差别为:MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持。MyISAM类型的表强调的是性能,其执行数度比InnoDB类型更快,

但是不提供事务支持,而InnoDB提供事务支持已经外部键等高级数据库功能。

  以下是一些细节和具体实现的差别:
(1)InnoDB不支持FULLTEXT类型的索引。
(2)InnoDB 中不保存表的具体行数,也就是说,执行select count(*) fromtable时,InnoDB要扫描一遍整个表来计算有多少行,但是MyISAM只要简单的读出保存好的行数即可。注意的是,当count(*)语句包含where条件时,两种表的操作是一样的。
(3)对于AUTO_INCREMENT类型的字段,InnoDB中必须包含只有该字段的索引,但是在MyISAM表中,可以和其他字段一起建立联合索引。
(4)DELETE FROM table时,InnoDB不会重新建立表,而是一行一行的删除。
(5)LOAD TABLE FROMMASTER操作对InnoDB是不起作用的,解决方法是首先把InnoDB表改成MyISAM表,导入数据后再改成InnoDB表,但是对于使用的额外的InnoDB特性(例如外键)的表不适用。

  另外,InnoDB表的行锁也不是绝对的,假如在执行一个SQL语句时MySQL不能确定要扫描的范围,InnoDB表同样会锁全表,例如updatetable set num=1 where name like “a%”两种类型最主要的差别就是Innodb支持事务处理与外键和行级锁.而MyISAM不支持.所以MyISAM往往就容易被人认为只适合在小项目中使用。我作为使用MySQL的用户角度出发,Innodb和MyISAM都是比较喜欢的,但是从我目前运维的数据库平台要达到需求:99.9%的稳定性,方便的扩展性和高可用性来说的话,MyISAM绝对是首选。

3.两种引擎所使用的索引的数据结构是什么?

  答:都是B+树!

  MyIASM引擎,B+树的数据结构中存储的内容实际上是实际数据的地址值。也就是说它的索引和实际数据是分开的,只不过使用索引指向了实际数据。这种索引的模式被称为非聚集索引。

  Innodb引擎的索引的数据结构也是B+树,只不过数据结构中存储的都是实际的数据,这种索引有被称为聚集索引。

4.两种引擎的应用原则?

  一般来说,MyISAM适合:

 (1)做很多count 的计算;
 (2)插入不频繁,查询非常频繁;
 (3)没有事务。

  InnoDB适合:
  (1)可靠性要求比较高,或者要求事务;
  (2)表更新和查询都相当的频繁,并且表锁定的机会比较大的情况指定数据引擎的创建;

posted @ 2018-04-14 16:01  记忆的痕迹  阅读(658)  评论(0编辑  收藏  举报