MySQL存储引擎、MyISAM、InnoDB
一、 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相关推荐
- 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 ...
- MySQL存储引擎(InnoDB引擎)
本篇章主要介绍什么是 MySQL 存储引擎?常用的 MySQL 存储引擎有哪些?以及详细介绍一下目前应用最广泛的 InnoDB 存储引擎,包括其:逻辑存储结构.架构.事务原理.MVCC等. 一.初识 ...
- mysql存储引擎中INNODB和MyISAM的区别
切记:存储引擎是基于表的,而不是数据库. 存储引擎概念: MySQL中的数据用各种不同的技术存储在文件(或者内存)中.这些技术中的每一种技术都使用不同的存储机制.索引技巧.锁定水平并且最终提供广泛的不 ...
- MySQL 存储引擎(InnoDB、MyISAM、MEMORY)
一.MySQL的体系结构 1.连接层:最上层是一些客户端和链接服务,主要完成一些类似于连接处理.授权认证.及相关的安全方案.服务器也会为安全接入的每个客户端验证它所具有的操作权限. 2.服务层:第二成 ...
- MySQL - 存储引擎MyISAM和Innodb
1. 概述 首先,我们先看一下MySQL的体系架构,对MySQL整个架构有一个直观的感受: MySQL Server架构自顶向下大致可以分网络连接层.服务层.存储引擎层和系统文件层. 存储引擎在MyS ...
- MySQL存储引擎及InnoDB并发控制介绍
MySQL存储引擎采用了可插拔的结构,即用户可以根据自己的需要来选择不同的存储引擎. 下表是MySQL不同的存储引擎的不同的特性: Feature<?xml:namespace prefix = ...
- Mysql存储引擎MyIsAM和InnoDB区别
Mysql 数据库中,最常用的两种引擎是innordb 和myisam.InnoDB 是Mysql 的默认存储引擎. 两者的区别: 1.事务处理上方面 MyISAM:强调的是性能,查询的速度比Inno ...
- MySQL 存储引擎(MyISAM、InnoDB、NDBCluster)
前言 MySQL 的存储引擎可能是所有关系型数据库产品中最具有特色的了,不仅可以同时使用多种存储引擎,而且每种存储引擎和MySQL之间使用插件方式这种非常松的耦合关系. 由于各存储引擎功能特性差异较大 ...
- MySQL 存储引擎 | MyISAM 与 InnoDB
文章目录 概念 innodb引擎的4大特性 索引结构 InnoDB MyISAM 区别 表级锁和行级锁 概念 MyISAM 是 MySQL 的默认数据库引擎(5.5版之前),但因为不支持事务处理而被 ...
- 浅谈MySQL存储引擎选择 InnoDB还是MyISAM
如果是一些小型的应用或项目,那么MyISAM 也许会更适合.当然,在大型的环境下使用MyISAM 也会有很大成功的时候,但却不总是这样的.如果你正在计划使用一个超大数据量的项目,那么你应该直接使用In ...
最新文章
- 【BZOJ1305】 [CQOI2009]dance跳舞
- 如何在Python中声明一个数组?
- Linux下查看操作系统的位数和系统名称版本信息
- 原创:(网格化地图之初)高斯大地座标(经度、纬度)→3°投影带平面直角坐标(X、Y)换算...
- POJ 3616 Milking Time
- hdu 2025:查找最大元素(水题,顺序查找)
- 验证码何时可以退出历史舞台?
- gridview添加header
- python对编写神经网络作用_神经网络(BP)算法Python实现及应用
- des算法c语言运行成功截图,求助攻:C语言DES算法的实现程序有问题
- 使用 Python 进行双重退火优化
- Servlet技术 - Servlet应用
- Java网络编程实现
- java 7下载地址
- typedef用法详解
- win7下配置python_win7如何配置Python环境变量
- Mplay 常用命令及功能简介
- .NET(C#)下的移动彩信MM7协议研究之路(一:题记)
- 人物-胡玮炜:胡玮炜
- HCIP——IPv6地址基础
热门文章
- 非正常关闭vi编辑器时会生成一个.swp文件
- SpringMVC常用配置-添加静态资源处理器-针对SpringMVC中静态资源无法访问的问题...
- Geoserver常见问题总结
- worksteal thread pool
- 每日英语:Why is Ye Shiwen’s Swim “Disturbing”?
- 解字符串不能超过8000的方法及交叉表的处理
- 正则表达式是匹配模式,要么匹配字符,要么匹配位置
- Mac node管理器nvm
- AngularJS中关于ng-class和*ngIf指令
- ISO时间转化时间戳