针对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 存储引擎的类型以及选择的更多相关文章

  1. Mysql存储引擎及选择方法

    0x00 Mysql数据库常用存储引擎 Mysql数据库是一款开源的数据库,支持多种存储引擎的选择,比如目前最常用的存储引擎有:MyISAM,InnoDB,Memory等. MyISAM存储引擎 My ...

  2. MYSQL系列-Mysql存储引擎选择

    MYSQL系列-Mysql存储引擎选择 //查看当前数据库支持的存储引擎 show engines \G; 创建表的时候可以通过engine=MyISAM指定存储引擎 MyISAM: .MYISAM不 ...

  3. Mysql存储引擎的选择

    Mysql存储引擎概述 mysql的存储引擎是插件式的,用户可以根据需求选择如何存储和索引数据是否使用事务等. Mysql支持多种存储引擎,用户可以选择不同的引擎来提高应用的效率,灵活的存储方案,存储 ...

  4. mysql 存储引擎 InnoDB 与 MyISAM 的区别和选择

    http://www.blogjava.net/jiangshachina/archive/2009/05/31/279288.html     酷壳 - MySQL: InnoDB 还是 MyISA ...

  5. Mysql存储引擎比较

    Mysql作为一个开源的免费数据库,在平时项目当中会经常使用到,而在项目当中我们的着重点一般在设计使用数据库上而非mysql本身上,所以在提到mysql的存储引擎时,一般都不曾知道,这里经过网上相关文 ...

  6. MySQL存储引擎之Myisam和Innodb总结性梳理

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

  7. MySQL存储引擎的实际应用以及对MySQL数据库中各主要存储引擎的独特特点的描述

    MySQL存储引擎的实际应用以及对MySQL数据库中各主要存储引擎的独特特点的描述: 1.MySQL有多种存储引擎: MyISAM.InnoDB.MERGE.MEMORY(HEAP).BDB(Berk ...

  8. 【转】mysql存储引擎

    http://www.cnblogs.com/kevingrace/p/5685355.html Mysql有两种存储引擎:InnoDB与Myisam,下表是两种引擎的简单对比   MyISAM In ...

  9. 第 3 章 MySQL 存储引擎简介

    第 3 章 MySQL 存储引擎简介 前言 3.1 MySQL 存储引擎概述 MyISAM 存储引擎是 MySQL 默认的存储引擎,也是目前 MySQL 使用最为广泛的存储引擎之一.他的前身就是我们在 ...

随机推荐

  1. pytorch-卷积基本网络结构-提取网络参数-初始化网络参数

    基本的卷积神经网络 from torch import nn class SimpleCNN(nn.Module): def __init__(self): super(SimpleCNN, self ...

  2. 性能测试 | 服务器CPU使用率高分析实例

    前面我们讨论系统调用的时候结论是耗时200ns-15us不等.不过我今天说的我的这个遭遇可能会让你进一步认识系统调用的真正开销.在本节里你会看到一个耗时2.5ms的connect系统调用,注意是毫秒, ...

  3. Repeater, DataList, 和GridView的区别及使用

    从对象层次图可以看出,Repeater是最轻最小的控件,它仅仅继承了基本控件的功能,包括ID属性.子控件集合等.另一方面,DataList和DataGrid则继承了WebControl功能,包括样式和 ...

  4. react封装基于axios的API请求

    一.最近做的一个后台管理项目,基于antd-pro做的,需要封装基于axios请求,便于开发,直接上代码. import axios from 'axios'; export const Method ...

  5. Hander创建消息

    每一个消息都需要被指定的Handler处理,通过Handler创建消息便可以完成此功能.Android消息机制中引入了消息池.Handler创建消息时首先查询消息池中是否有消息存在,如果有直接从消息池 ...

  6. <application>节点属性

    1.android:allowBackup 它表示是否允许应用程序参与备份.如果将该属性设置为false,则即使备份整个系统,也不会执行这个应用程序的备份操作,而整个系统备份能导致所有应用程序数据通过 ...

  7. Linux命令对应的英文全称【转载】

    su:Swith user  切换用户,切换到root用户cat: Concatenate  串联uname: Unix name  系统名称df: Disk free  空余硬盘du: Disk u ...

  8. [LeetCode 206] Reverse Linked List 翻转单链表

    本题要求将给定的单链表翻转,是校招面试手撕代码环节的高频题,能很好地考察对单链表这一最简单数据结构的理解:可以使用迭代和递归两种方法对一个给定的单链表进行翻转,具体实现如下: class Soluti ...

  9. playbook文件内容解释

    [root@node1 playbook]# cat nginx.yml - hosts: test \\主机组,要和nginx.yml在同一个目录下 remote_user: root \\远端执行 ...

  10. DevOps - DevOps工具链

    不要满足于使用世界上已存在的各种方法和技术,而应重点放在希望达到的效果上! 单单使用工具不难,困难的是在团队开发中熟练使用,并形成一套理想的工作流程,只有在团队中工具和思想才能发挥最大价值. 开源工具 ...