MySQL 存储引擎的类型以及选择
针对MySQL,数据最终以什么样的形式保存?以及数据保存在硬盘的什么位置?
1、MySQL的存储引擎
MySQL属于数据管理系统(DBMS),其中包括数据库,负责存储数据;还有数据库访问管理的接口系统,负责管理数据库。
为了满足不同的业务需求,MySQL的数据库采用多种存储引擎进行数据存储。
2、存储引擎是什么?
存储引擎指定了表的存储类型,即如何存储和索引数据、是否支持事务等。同时,存储引擎也决定了表在计算机中的存储方式。
我的MySQL Server version为5.7,支持的存储引擎如下表,默认为InnoDB
XA是跨数据库事务,可以基于此实现分布式事务。
savepoint:即一个事务中的存档点,可以rollback到此处,而且不会终结事务。具体细节见官方文档。
(https://dev.mysql.com/doc/refman/8.0/en/savepoint.html)
3、InnoDB和MyISAM各自的基本特点和使用场合:
MyISAM:不需要事务处理,以访问为主的应用适合使用该引擎;
InnoDB:支持事务控制,比MyISAM占用更多的磁盘空间。适合需要进行频繁更新、删除操作,同时还对事务的完整性要求性比较高,需要实现并发控制的应用。
功能 | InnoDB | MyISAM |
支持事务 | 支持 | 不支持 |
支持全文索引 | 不支持 | 支持 |
外键约束 | 支持 | 不支持 |
表空间大小 | 较大 | 较小 |
数据行锁定 | 支持 | 不支持 |
4、为了实现特殊功能,可以指定某个表的存储引擎,因此表的存储引擎也可以被称为表类型
create database enginedb;
use enginedb;
/*创建类型为MyISAM的表*/
drop table if exists 'myisam';
create table 'myisam'(
sid INT(4)
)engine=MyISAM; /*创建类型为InnoDB的表*/
drop table if exists 'innodb';
create table 'innodb'(
sid INT(4)
)engine=InnoDB;
5、MySQL的数据文件是怎样的?它是如何存放的?
不同的存储引擎下,数据文件有所不同。
a、数据文件的位置
不同操作系统数据文件的默认存储位置不同,本机:datadir=C:/ProgramData/MySQL/MySQL Server 5.7/Data
b、MyISAM类型的表文件中,数据文件有三种:
- .frm 表结构定义文件,该文件与存储引擎无关,都有的。
- .MYI 索引文件,存放MyISAM类型表的索引信息。
- .MYD 数据文件,存放表中的数据
c、InnoDB类型的表文件
- .frm
- ibdata1 数据文件,保存所有InnoDB类型表的数据
6、根据实际选择合适的存储引擎
以下是由实践经验总结的建议。
MyISAM:
如果应用以读操作和插入操作为主,只有少量的更新和删除操作,并且对事务的完整性、并发性要求不高,那么MyISAM是一个不错的选择。
MyISAM是在Web、数据仓储等环境下最常使用的存储引擎。
InnoDB:
支持事务处理、支持外键。
如果应用对事务的完整性有比较高的要求,在并发条件下要求数据的一致性,数据操作处理插入和查询以外,还包括很多更新、删除操作,那么InnoDB是比较合适的选择。
InnoDB存储引擎除了有效地降低由于删除和更新导致的锁定,还可以确保事务完整提交和回滚,对类似计费系统或者财务系统等对数据的准确性要求比较高的系统,InnoDB是合适选择。
MEMORY:
将所有的数据保存在RAM中。
在需要快速定位记录和其他类似数据的环境下,可提供极快的访问。
缺陷在于,MEMORY对表的大小有限制,太大的表无法cache在内存中。其次是要确保表的数据可以恢复,在数据库异常终止后,表中的数据是可以恢复的。
MEMORY表通常用于更新不太频繁的小表,用于快速得到访问结果。
MERGE:
将一系列相同结构的MyISAM表以逻辑方式组合在一起,并作为一个对象引用它们。
MERGE表的优点在于可以突破单个MyISAM表的大小限制,并通过将不同的表分布在多个磁盘上,可以有效地改善MERGE表的访问效率。
对于存储仓储等VLDB环境十分合适。
MySQL 存储引擎的类型以及选择的更多相关文章
- Mysql存储引擎及选择方法
0x00 Mysql数据库常用存储引擎 Mysql数据库是一款开源的数据库,支持多种存储引擎的选择,比如目前最常用的存储引擎有:MyISAM,InnoDB,Memory等. MyISAM存储引擎 My ...
- MYSQL系列-Mysql存储引擎选择
MYSQL系列-Mysql存储引擎选择 //查看当前数据库支持的存储引擎 show engines \G; 创建表的时候可以通过engine=MyISAM指定存储引擎 MyISAM: .MYISAM不 ...
- Mysql存储引擎的选择
Mysql存储引擎概述 mysql的存储引擎是插件式的,用户可以根据需求选择如何存储和索引数据是否使用事务等. Mysql支持多种存储引擎,用户可以选择不同的引擎来提高应用的效率,灵活的存储方案,存储 ...
- mysql 存储引擎 InnoDB 与 MyISAM 的区别和选择
http://www.blogjava.net/jiangshachina/archive/2009/05/31/279288.html 酷壳 - MySQL: InnoDB 还是 MyISA ...
- Mysql存储引擎比较
Mysql作为一个开源的免费数据库,在平时项目当中会经常使用到,而在项目当中我们的着重点一般在设计使用数据库上而非mysql本身上,所以在提到mysql的存储引擎时,一般都不曾知道,这里经过网上相关文 ...
- MySQL存储引擎之Myisam和Innodb总结性梳理
Mysql有两种存储引擎:InnoDB与Myisam,下表是两种引擎的简单对比 MyISAM InnoDB 构成上的区别: 每个MyISAM在磁盘上存储成三个文件.第一个 文件的名字以表的名字开始 ...
- MySQL存储引擎的实际应用以及对MySQL数据库中各主要存储引擎的独特特点的描述
MySQL存储引擎的实际应用以及对MySQL数据库中各主要存储引擎的独特特点的描述: 1.MySQL有多种存储引擎: MyISAM.InnoDB.MERGE.MEMORY(HEAP).BDB(Berk ...
- 【转】mysql存储引擎
http://www.cnblogs.com/kevingrace/p/5685355.html Mysql有两种存储引擎:InnoDB与Myisam,下表是两种引擎的简单对比 MyISAM In ...
- 第 3 章 MySQL 存储引擎简介
第 3 章 MySQL 存储引擎简介 前言 3.1 MySQL 存储引擎概述 MyISAM 存储引擎是 MySQL 默认的存储引擎,也是目前 MySQL 使用最为广泛的存储引擎之一.他的前身就是我们在 ...
随机推荐
- java什么时候进行垃圾回收,垃圾回收的执行流程
java的垃圾回收分为 三个区域新生代 老年代 永久代 一个对象实例化时 先去看伊甸园有没有足够的空间如果有 不进行垃圾回收 ,对象直接在伊甸园存储.如果伊甸园内存已满,会进行一次minor gc然后 ...
- Python中Bool为False的情况
在python中,以下数值会被认为是False: 为0的数字,包括0,0.0空字符串,包括'', ""表示空值的None空集合,包括(),[],{}其他的值都认为是True. No ...
- centos系统python2.7更新到3.5
1. 下载Python-3.5.2 wget https://www.python.org/ftp/python/3.5.2/Python-3.5.2.tgz 2.安装 (报错no acceptabl ...
- ubuntu下如何安装linaro工具链?
1. 获取工具链 从此处获取,如: wget https://releases.linaro.org/components/toolchain/binaries/7.3-2018.05/aarch64 ...
- ios 报错记录
1. 运行xcode 报错:unterminated conditional directive #ifdef 缺少对应的#endif 在结尾加上就好了 2.iOS添加非(c,c++)文件引发的&qu ...
- python安装gmpy2模块时出现错误的解决
接下来表演的是安装Python模块gmpy2 此模块用来进行高精度计算的模块,个人根据需求常用来进行rsa加密算法的计算 作为一个资质浅淡的ubuntu玩家,这些知识当然是在网上搜索得到的,不过网上的 ...
- JS选择器querySelector和~All,三个原生选择器
定义: querySelector() 方法返回文档中匹配指定 CSS 选择器的一个元素. 注意: querySelector() 方法仅仅返回匹配指定选择器的第一个元素.如果你需要返回所有的元素,请 ...
- 互斥锁lock、信号量semaphore、事件Event、
1.互斥锁lock 应用在多进程中互斥所lock:互斥锁是进程间的get_ticket互相排斥进程之间,谁先枪占到资源,谁就先上锁,等到解锁之后,下一个进程在继续使用.# 语法: 上锁: lock.a ...
- an extra named object property
Grunt supports the ability to split each task configuration into several separate configurations all ...
- ZeroMQ——一个轻量级的消息通信组件 C#
ZeroMQ——一个轻量级的消息通信组件 ZeroMQ是一个轻量级的消息通信组件,尽管名字中包含了"MQ",严格上来讲ZeroMQ并不是"消息队列/消息中间件" ...