一、 MySQL存储引擎MyISAM与InnoDB如何选择

  MySQL有多种存储引擎,每种存储引擎有各自的优缺点,可以择优选择使用:MyISAM、InnoDB、MERGE、MEMORY(HEAP)、BDB(BerkeleyDB)、EXAMPLE、FEDERATED、ARCHIVE、CSV、BLACKHOLE。

  虽然MySQL里的存储引擎不只是MyISAM与InnoDB这两个,但常用的就是两个。

  两种存储引擎的大致区别表现在:

  1)InnoDB支持事务,MyISAM不支持,这一点是非常之重要。事务是一种高级的处理方式,如在一些列增删改中只要哪个出错还可以回滚还原,而MyISAM就不可以了。

  2)MyISAM适合查询以及插入为主的应用,InnoDB适合频繁修改以及涉及到安全性较高的应用。

  3)InnoDB支持外键,MyISAM不支持。

  4)从MySQL5.5.5以后,InnoDB是默认引擎。

  5)InnoDB不支持FULLTEXT类型的索引。但是InnoDB可以使用sphinx插件支持全文索引。

  6)InnoDB中不保存表的行数,如select count(*) from table时,InnoDB需要扫描一遍整个表来计算有多少行,但是MyISAM只要简单的读出保存好的行数即可。注意的是,当count(*)语句包含where条件时MyISAM也需要扫描整个表。

  7)对于自增长的字段,InnoDB中必须包含只有该字段的索引,但是在MyISAM表中可以和其他字段一起建立联合索引。

  8)清空整个表时,InnoDB是一行一行的删除,效率非常慢。MyISAM则会重建表。

  9)InnoDB支持行锁(某些情况下还是锁整表,如 update table set a=1 where user like '%lee%'。

  二、 关于MyISAM与InnoDB选择使用:

  MYISAM和INNODB是Mysql数据库提供的两种存储引擎。两者的优劣可谓是各有千秋。INNODB会支持一些关系数据库的高级功能,如事务功能和行级锁,MYISAM不支持。MYISAM的性能更优,占用的存储空间少。所以,选择何种存储引擎,视具体应用而定:

  1)如果你的应用程序一定要使用事务,毫无疑问你要选择INNODB引擎。但要注意,INNODB的行级锁是有条件的。在where条件没有使用主键时,照样会锁全表。比如DELETE FROM mytable这样的删除语句。

  2)如果你的应用程序对查询性能要求较高,就要使用MYISAM了。MYISAM索引和数据是分开的,而且其索引是压缩的,可以更好地利用内存。所以它的查询性能明显优于INNODB。压缩后的索引也能节约一些磁盘空间。MYISAM拥有全文索引的功能,这可以极大地优化LIKE查询的效率。

  有人说MYISAM只能用于小型应用,其实这只是一种偏见。

  如果数据量比较大,这是需要通过升级架构来解决,比如分表分库,而不是单纯地依赖存储引擎。

  现在一般都是选用innodb了,主要是myisam的全表锁,读写串行问题,并发效率锁表,效率低myisam对于读写密集型应用一般是不会去选用的。大数据学习秋秋Qun*606连着*【859】+然后连着705

  三、 关于Mysql数据库默认的存储引擎:

  MyISAM和InnoDB是MySQL的两种存储引擎。

  如果是默认安装,那就应该是InnoDB,你可以在my.cnf文件中找到default-storage-engine=INNODB;

  当然你可以在建表时指定相应的存储引擎。

  通过show create table xx 可以看见相应信息。

  四、 Mysql中InnoDB和MyISAM的比较

  1)MyISAM:

  每个MyISAM在磁盘上存储成三个文件。第一个文件的名字以表的名字开始,扩展名指出文件类型。

  frm文件存储表定义;

  MYD (MYData)文件存储表的数据;

  MYI (MYIndex) 文件存储表的索引。

  MyISAM表格可以被压缩,而且它们支持全文搜索。不支持事务,而且也不支持外键。如果事物回滚将造成不完全回滚,不具有原子性。在进行updata时进行表锁,并发量相对较小。如果执行大量的SELECT,MyISAM是更好的选择。

  MyISAM的索引和数据是分开的,并且索引是有压缩的,内存使用率就对应提高了不少。能加载更多索引,而Innodb是索引和数据是紧密捆绑的,没有使用压缩从而会造成Innodb比MyISAM体积庞大不小。

  MyISAM缓存在内存的是索引,不是数据。而InnoDB缓存在内存的是数据,相对来说,服务器内存越大,InnoDB发挥的优势越大。

  优点:查询数据相对较快,适合大量的select,可以全文索引。

  缺点:不支持事务,不支持外键,并发量较小,不适合大量update

  2)InnoDB:

  这种类型是事务安全的。它与BDB类型具有相同的特性,它们还支持外键。InnoDB表格速度很快。具有比BDB还丰富的特性,因此如果需要一个事务安全的存储引擎,建议使用它。在update时表进行行锁,并发量相对较大。如果你的数据执行大量的INSERT或UPDATE,出于性能方面的考虑,应该使用InnoDB表。

  优点:支持事务,支持外键,并发量较大,适合大量update。

  缺点:查询数据相对较快,不适合大量的select。

  对于支持事物的InnoDB类型的表,影响速度的主要原因是AUTOCOMMIT默认设置是打开的,而且程序没有显式调用BEGIN 开始事务,导致每插入一条都自动Commit,严重影响了速度。可以在执行sql前调用begin,多条sql形成一个事物(即使autocommit打开也可以),将大大提高性能。

  基本的差别为:

  MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持。

  MyISAM类型的表强调的是性能,其执行数度比InnoDB类型更快,但是不提供事务支持,而InnoDB提供事务支持已经外部键等高级数据库功能。

转载于:https://juejin.im/post/5d09d5b96fb9a07f091ba717

MySQL存储引擎、MyISAM、InnoDB相关推荐

  1. mysql dba系统学习(20)mysql存储引擎MyISAM

    mysql存储引擎MyISAM 1,创建myisam表 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 mysql> creat ...

  2. MySQL存储引擎(InnoDB引擎)

    本篇章主要介绍什么是 MySQL 存储引擎?常用的 MySQL 存储引擎有哪些?以及详细介绍一下目前应用最广泛的 InnoDB 存储引擎,包括其:逻辑存储结构.架构.事务原理.MVCC等. 一.初识  ...

  3. mysql存储引擎中INNODB和MyISAM的区别

    切记:存储引擎是基于表的,而不是数据库. 存储引擎概念: MySQL中的数据用各种不同的技术存储在文件(或者内存)中.这些技术中的每一种技术都使用不同的存储机制.索引技巧.锁定水平并且最终提供广泛的不 ...

  4. MySQL 存储引擎(InnoDB、MyISAM、MEMORY)

    一.MySQL的体系结构 1.连接层:最上层是一些客户端和链接服务,主要完成一些类似于连接处理.授权认证.及相关的安全方案.服务器也会为安全接入的每个客户端验证它所具有的操作权限. 2.服务层:第二成 ...

  5. MySQL - 存储引擎MyISAM和Innodb

    1. 概述 首先,我们先看一下MySQL的体系架构,对MySQL整个架构有一个直观的感受: MySQL Server架构自顶向下大致可以分网络连接层.服务层.存储引擎层和系统文件层. 存储引擎在MyS ...

  6. MySQL存储引擎及InnoDB并发控制介绍

    MySQL存储引擎采用了可插拔的结构,即用户可以根据自己的需要来选择不同的存储引擎. 下表是MySQL不同的存储引擎的不同的特性: Feature<?xml:namespace prefix = ...

  7. Mysql存储引擎MyIsAM和InnoDB区别

    Mysql 数据库中,最常用的两种引擎是innordb 和myisam.InnoDB 是Mysql 的默认存储引擎. 两者的区别: 1.事务处理上方面 MyISAM:强调的是性能,查询的速度比Inno ...

  8. MySQL 存储引擎(MyISAM、InnoDB、NDBCluster)

    前言 MySQL 的存储引擎可能是所有关系型数据库产品中最具有特色的了,不仅可以同时使用多种存储引擎,而且每种存储引擎和MySQL之间使用插件方式这种非常松的耦合关系. 由于各存储引擎功能特性差异较大 ...

  9. MySQL 存储引擎 | MyISAM 与 InnoDB

    文章目录 概念 innodb引擎的4大特性 索引结构 InnoDB MyISAM 区别 表级锁和行级锁 概念 MyISAM 是 MySQL 的默认数据库引擎(5.5版之前),但因为不支持事务处理而被 ...

  10. 浅谈MySQL存储引擎选择 InnoDB还是MyISAM

    如果是一些小型的应用或项目,那么MyISAM 也许会更适合.当然,在大型的环境下使用MyISAM 也会有很大成功的时候,但却不总是这样的.如果你正在计划使用一个超大数据量的项目,那么你应该直接使用In ...

最新文章

  1. 【BZOJ1305】 [CQOI2009]dance跳舞
  2. 如何在Python中声明一个数组?
  3. Linux下查看操作系统的位数和系统名称版本信息
  4. 原创:(网格化地图之初)高斯大地座标(经度、纬度)→3°投影带平面直角坐标(X、Y)换算...
  5. POJ 3616 Milking Time
  6. hdu 2025:查找最大元素(水题,顺序查找)
  7. 验证码何时可以退出历史舞台?
  8. gridview添加header
  9. python对编写神经网络作用_神经网络(BP)算法Python实现及应用
  10. des算法c语言运行成功截图,求助攻:C语言DES算法的实现程序有问题
  11. 使用 Python 进行双重退火优化
  12. Servlet技术 - Servlet应用
  13. Java网络编程实现
  14. java 7下载地址
  15. typedef用法详解
  16. win7下配置python_win7如何配置Python环境变量
  17. Mplay 常用命令及功能简介
  18. .NET(C#)下的移动彩信MM7协议研究之路(一:题记)
  19. 人物-胡玮炜:胡玮炜
  20. HCIP——IPv6地址基础

热门文章

  1. 非正常关闭vi编辑器时会生成一个.swp文件
  2. SpringMVC常用配置-添加静态资源处理器-针对SpringMVC中静态资源无法访问的问题...
  3. Geoserver常见问题总结
  4. worksteal thread pool
  5. 每日英语:Why is Ye Shiwen’s Swim “Disturbing”?
  6. 解字符串不能超过8000的方法及交叉表的处理
  7. 正则表达式是匹配模式,要么匹配字符,要么匹配位置
  8. Mac node管理器nvm
  9. AngularJS中关于ng-class和*ngIf指令
  10. ISO时间转化时间戳