Mysql有两大常用的存储引擎MyISAM,InnoDB,默认的形式是前者。

两者基本的差别是对事务处理、外键和行级锁的主持上,InnoDB支持事务处理、外键等高级特性,而MyISAM不支持。MyISAM类型的表强调的是性能,如果执行大量的select操作,MyISAM是更好的选择,其执行数度比InnoDB类型更快。

两者具体的差别如下:

1.MyISAM的索引和文件本身是分开的,这一点在存储上能看出来:每个MyISAM在磁盘上存储成三个文件:文件的名字以表的名字开始,扩展名指出文件类型。

  .frm文件存储表定义;数据文件:扩展名为.MYD (MYData);索引文件:扩展名是.MYI (MYIndex)。

2.在事务处理方面:MyISAM不支持事务处理,而且不支持外键(foreign key),而InnoDB支持。

  例如:create table table2(

id char(1) not null,

foreign key(id) references table1(id)

);//table1已经建立

  这里默认使MyISAM的存储引擎,show create table2一下,则会出现:

  CREATE TABLE `table2` (                                                                                  

          `id` char(1) NOT NULL,                                                                             

          KEY `id` (`id`)                                                                                    

        ) ENGINE=MyISAM DEFAULT CHARSET=gb2312

  可见,table2并没有建立外键。

3.InnoDB不支持fulltext类型的索引;

4.如果执行大量的SELECT,MyISAM是更好的选择,如果执行大量的INSERT或UPDATE,出于性能方面的考虑,应该使用InnoDB表;

5.delete from table时,InnoDB不会重新建立表,而是一行一行的删除;

6.LOAD TABLE FROM MASTER操作对InnoDB是不起作用的,解决方法是首先把InnoDB表改成MyISAM表,导入数据后再改成InnoDB表,但是对于使用的额外的InnoDB特性(例如外键)的表不适用;

7.对AUTO_INCREMENT字段的操作:对于AUTO_INCREMENT类型的字段,InnoDB中必须包含只有该字段的索引,在MyISAM表中,可以和其他字段一起建立联合索引;

8.InnoDB中不保存表的具体行数,而MyISAM是保存的,执行select count(*) from table时,InnoDB要扫描一遍整个表来计算有多少行,但是MyISAM只要简单的读出保存好的行数即可。当count(*)语句包含where条件时例外,两种表的操作是一样的(这很好理解,因为存储的行数不能利用了)。

9.对锁的支持:InnoDB提供行锁(和Oracle类似),而MyISAM则在整个表上加锁。

MySQL两大存储引擎:MyISAM和InnoDB的更多相关文章

  1. MySQL两种存储引擎: MyISAM和InnoDB

    MySQL两种存储引擎: MyISAM和InnoDB 简单总结   MyISAM是MySQL的默认数据库引擎(5.5版之前),由早期的ISAM(Indexed Sequential Access Me ...

  2. MySQL - 两种存储引擎 (MyISAM PK InnoDB) + MVCC

    总结 1.两种存储引擎各有各的有点,MyISAM专注性能,InnoDB专注事务.两者最大的区别就是InnoDB支持事务,和行锁. 2.InnoDB采用MVCC(Multi-Version Concur ...

  3. MySQL两种存储引擎: MyISAM和InnoDB 简单总结

    MyISAM是MySQL的默认数据库引擎(5.5版之前),由早期的ISAM(Indexed Sequential Access Method:有索引的顺序访问方法)所改良.虽然性能极佳,但却有一个缺点 ...

  4. mysql架构与存储引擎 (Myisam与Innodb)

    mysql抽象架构:可以分为SQL Layer和Storage Engine Layer mysql的engine层是基于表的,不是基于库的,创建表的语句可以指定engine Mysql的架构 Mys ...

  5. MySQL两大存储引擎InnoDB与MyISAM

    1.InnoDB存储引擎 MySQL5.5中InnoDB成为默认的存储引擎.InnoDB是事务型存储引擎,被设计用来处理大量的短期事务.它的性能和自动崩溃恢复特性,使得它在非事务场景中也很流行. 所以 ...

  6. MySQL进阶之存储引擎MyISAM与InnoDB的区别

    一.存储引擎(表类型) 通常意义上,数据库就是数据的集合,具体到计算机数据库可以是存储器上一些文件的集合或一些内存数据的集合.我们通常说的MySQL数据库.sql Server数据库等其实是数据库管理 ...

  7. MySQL存储引擎 - Myisam和Innodb

    Mysql有两种存储引擎:InnoDB与Myisam,下表是两种引擎的简单对比   MyISAM InnoDB 构成上的区别: 每个MyISAM在磁盘上存储成三个文件.第一个 文件的名字以表的名字开始 ...

  8. MySQL存储引擎MyISAM与InnoDB

    一. MySQL存储引擎MyISAM与InnoDB如何选择 MySQL有多种存储引擎,每种存储引擎有各自的优缺点,可以择优选择使用:MyISAM.InnoDB.MERGE.MEMORY(HEAP).B ...

  9. MySQL存储引擎MyISAM和InnoDB,索引结构优缺点

    MySQL存储引擎MyISAM和InnoDB底层索引结构 深入理解MySQL索引底层数据结构与算法 (各种索引结构优缺点) Myisam和Innodb索引实现的不同(存储结构) 存储引擎作用于什么对象 ...

随机推荐

  1. HDU 1020:Encoding

    pid=1020">Encoding Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Ja ...

  2. perl chomp 函数的真正作用

    之前一直以为chomp函数只是去掉字符串末尾的\n, 但是今天写程序遇到一个bug,最后的原因就处在chomp上: 读取fasta文件,内容如下: >1 ATGCTAGCTACGTACGTACG ...

  3. jquery注册文本框获取焦点清空,失去焦点赋值的简单实例

    在我们开发过程中特别是用户注册时会有一个效果,就是文本框获取焦点清空提示,如果用户没有输入信息失去焦点赋值上我们的提示语.   <html> <head> <meta h ...

  4. Eclipse导入android项目包xml报错未生成R文件

    最近很是头痛的就是项目带回家做的时候.导入各种问题.自从升级23以后. 生成的带appcompat_v7包.copy时不论是新建还是导入这个包,项目都会报错. 网上的方法试了各种clean各种fix等 ...

  5. 解决导入protobuf源代码Unity报错的问题

    将源代码导入Assets目录后, unity引擎会出现以下报错: 解决办法: 在 unity项目Assets目录中创建smcs.rsp文件,内容为-unsafe,其作用为可编译不安全代码.     然 ...

  6. Fast-RCNN

    后面框架回归和分类都放到了神经网络里 测试速度提升100倍 训练10

  7. #import 无法打开源文件msado.tlh

    #import 无法打开源文件msado.tlh #import "c:\program files\common files\system\ado\msado15.dll" no ...

  8. 异常处理----使用 try…catch…finally 处理异常

    使用 try…catch…finally 处理异常 异常处理是通过try-catch-finally语句实现的. try { ...... //可能产生异常的代码 } catch( Exception ...

  9. python2.0_s12_day13_javascript&Dom&jQuery

    今天主要内容:JavaScriptDomjQuery http://www.cnblogs.com/wupeiqi/articles/5369773.html 今天主要内容大致了解:javascrip ...

  10. mysql 中实现行变列

    前言: mysql行列变化,最难的就是将多个列变成多行,使用的比较多的是统计学中行变列,列变行,没有找到现成的函数或者语句,所以自己写了存储过程,使用动态sql来实现,应用业务场景,用户每个月都有使用 ...