我的编程空间,编程开发者的网络收藏夹
学习永远不晚

【超简单】MySQL存储引擎的选择与配置

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

【超简单】MySQL存储引擎的选择与配置

【超简单】MySQL存储引擎的选择与配置

存储引擎简介

MySQL中的数据用各种不同的技术存储在文件(或内存)中。每一种技术都使用不同的存储机构,索引技巧,锁定水平并且最终提供广泛的不同的功能和能力。通过选择不同的技术,能够获得额外的速度或者功能,从而改善应用的整体功能。这些不同的技术以及配套的相关功能在MySQL中被称为存储引擎。

下面就为大家介绍两种MySQL中比较常见的两种存储引擎:MyISAM和InnoDB

MyISAM存储引擎

MyISAM存储引擎是MySQL关系数据库系统5.5版本之前默认的存储引擎,它的前身是ISAM,ISAM执行读取操作的速度很快,而且不占用大量的内存和存储资源。但是也有他的不足之处:①、不支持事务处理;②、不能容错,即如果硬盘崩溃了,那么数据文件就无法修复了,除非经常备份所有的实时数据,通过其复制特性,MySQL能够支持这样的备份应用程序了。

MyISAM存储引擎的特点

  1. 不支持事务,需要事务支持的系统不能使用MyISAM作为存储引擎
  2. 表级锁定形式,数据在更新时锁定整个表
  3. 数据库在读写过程中相互阻塞,即读取时不能写入,写入时不能读取
  4. 可以通过key_buffer_size来设置缓存索引,提高访问的性能,减少磁盘IO(读写)的压力
  5. MyISAM存储引擎不支持外键约束,只支持全文索引
  6. 每个MyISAM在磁盘上存储成三个文件:

.frm 文件存储表定义

.MYD(MYData) 数据文件

.MYI(MYIndex) 索引文件

基于MyISAM这样的特性,所以MyISAM主要适用于:一些非高并发的读写不需要同时进行的场所;如:电子商城。。。

InnoDB存储引擎

InnoDB是为了处理巨大数据量时的最大性能而设计的。它的CPU效率可能是任何其他基于磁盘的关系数据库引擎所不能匹敌的。

InnoDB存储引擎的特点

  1. 支持事务,支持四个事务隔离级别
  2. 行级锁定,但是全表扫描仍然会是表级锁定
  3. 读写阻塞与事务隔离级别相关
  4. 具有非常高效的缓存特性,能缓存索引,也能缓存数据
  5. 表与主键以簇的方式存储,即存在外键约束
  6. 支持分区、表空间,类似Oracle数据库

基于InnoDB的特性,所以InnoDB主要适用于:论坛、微博、银行等高并发的场所

企业选择存储引擎的依据

  1. 存储引擎支持的字段和数据类型
  2. 锁定类型
  3. 索引的支持
  4. 事务处理的支持

数据库及表的存储引擎的查看

1. 查看数据库目前使用的存储引擎

mysql> use school;    //进入school数据库
Database changed
mysql> show engines;     //查看school默认使用的存储引擎,这里因为我使用的是MySQL5.7版本的,所以默认是InnoDB

   引擎类型          是否能使用                                                                  是否支持事务           表示为当前默认的引擎
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| Engine             | Support | Comment                                                        | Transactions | XA   | Savepoints |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| InnoDB             | DEFAULT | Supports transactions, row-level locking, and foreign keys     | YES          | YES  | YES        |
| MRG_MYISAM         | YES     | Collection of identical MyISAM tables                          | NO           | NO   | NO         |
| MEMORY             | YES     | Hash based, stored in memory, useful for temporary tables      | NO           | NO   | NO         |
| BLACKHOLE          | YES     | /dev/null storage engine (anything you write to it disappears) | NO           | NO   | NO         |
| MyISAM             | YES     | MyISAM storage engine                                          | NO           | NO   | NO         |
| CSV                | YES     | CSV storage engine                                             | NO           | NO   | NO         |
| ARCHIVE            | YES     | Archive storage engine                                         | NO           | NO   | NO         |
| PERFORMANCE_SCHEMA | YES     | Performance Schema                                             | NO           | NO   | NO         |
| FEDERATED          | NO      | Federated MySQL storage engine                                 | NULL         | NULL | NULL       |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
9 rows in set (0.01 sec)

2. 查看表正在使用的存储引擎

①、直接使用show table status;图示如下

mysql> mysql> show table status from school where name='info';
+------+--------+---------+------------+------+
| Name | Engine | Version | Row_format | Rows |
+------+--------+---------+------------+------+
| info | InnoDB |      10 | Dynamic    |    1 |                 
+------+--------+---------+------------+------+
1 row in set (0.00 sec)
//省略部分内容

这里可以看到info使用的存储引擎是InnoDB

②、进入表所在的数据库,然后使用show create 命令;图示如下

mysql> use school;

Database changed
mysql> show create table info;
+-------+--------------------------------------+
| Table | Create Table                         |
+-------+--------------------------------------+
| info  | CREATE TABLE "info" (
  "name" char(10) DEFAULT NULL,
  "score" decimal(5,2) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
+-------+--------------------------------------+
1 row in set (0.00 sec)

这里也可以直接看到info表的存储引擎是InnoDB;

数据库存储引擎的修改

这里也有四种方法进行修改

①、使用alter table命令修改,(这里只针对现有的表或者数据库)图示如下

mysql> use school;     //进入school数据库
Database changed
mysql> show create table info;        //查看当前使用的存储引擎
+-------+--------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table                                                                                                                   |
+-------+--------------------------------------------------------------------------------------------------------------------------------+
| info  | CREATE TABLE "info" (
  "name" char(10) DEFAULT NULL,
  "score" decimal(5,2) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |      //这里可以看到默认使用的InnoDB类型的
+-------+--------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

mysql> alter table info engine=MyISAM;      //使用alter table 命令进行修改
Query OK, 0 rows affected (0.04 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> show create table info;      //再次查看info表使用的存储引擎类型
+-------+--------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table                                                                                                                   |
+-------+--------------------------------------------------------------------------------------------------------------------------------+
| info  | CREATE TABLE "info" (
  "name" char(10) DEFAULT NULL,
  "score" decimal(5,2) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8 |     //这里可以看到存储引擎就被修改为MyISAM类型了
+-------+--------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

②、修改MySQL的配置文件/etc/my.cnf,指定default-storage-engine选项设置默认的存储引擎 (这里针对的是后续新创建的表)

[root@localhost ~]# vim /etc/my.cnf
...省略
[mysqld]
...省略
pid-file = /usr/local/mysql/mysqld.pid
default-storage-engine=MyISAM       //添加指定默认存储引擎类型MyISAM
socket = /usr/local/mysql/mysql.sock
...省略
修改了配置文件后需要重启MySQL服务

> [root@localhost ~]# systemctl restart mysqld.service

重新启动MySQL服务后,我们再次进入数据库,然后创建一个新的表,在查看存储引擎

mysql> create database test;       //创建一个新的数据库test
Query OK, 1 row affected (0.01 sec)

mysql> use test;       //进入test数据库
Database changed
mysql> create table test (id int);        //创建一个test表
Query OK, 0 rows affected (0.01 sec) 

mysql> show create table test;      //查看test表的存储引擎
+-------+----------------------------+
| Table | Create Table               |
+-------+----------------------------+
| test  | CREATE TABLE "test" (
  "id" int(11) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8 |      //这里可以看到存储引擎就是MyISAM  
+-------+----------------------------+
1 row in set (0.03 sec)

③、使用create table 创建表时用engine指定默认的存储引擎 (创建新表时自己指定)

mysql> use school;

Database changed
mysql> create table zyc (id int) engine=InnoDB;    //创建一个新表zyc并且指定存储引擎为InnoDB
Query OK, 0 rows affected (0.02 sec)

mysql> show create table zyc;        //查看zyc的存储引擎
+-------+------------------------------+
| Table | Create Table                 |
+-------+------------------------------+
| zyc   | CREATE TABLE "zyc" (
  "id" int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |   //这里可以看到存储引擎为InnoDB
+-------+------------------------------+
1 row in set (0.00 sec)

④、使用mysql_convert_table_format命令批量转换存储引擎,命令格式如下:

mysql_convert_table_format --user=root --password=密码 --socket=/temp/mysql.sock --engine=引擎 库名 表名

由于博主使用的是MySQL5.7版本,而这条命令只有MySQL5.5才有,所以这里就不详细介绍了,如果有看官感兴趣,可以自己安装一个MySQL5.5尝试下。

MySQL的存储引擎到这里就介绍完了,后续请期待:MySQL增量备份、MySQL主从同步、MySQL读写分离

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

【超简单】MySQL存储引擎的选择与配置

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

MySQL存储引擎在Linux的选择

在MySQL中,存储引擎是用于存储和处理数据的核心组件。在Linux系统中,MySQL支持多种存储引擎,包括InnoDB、MyISAM、MEMORY、CSV等。以下是一些常见的MySQL存储引擎在Linux中的选择建议:InnoDB:Inn
MySQL存储引擎在Linux的选择
2024-08-16

MySQL 选择合适的存储引擎

对于数据库这一块询问比较多的就是在 MySQL 中怎么去选择一种何时当前业务需求的存储引擎,而 MySQL 中支持的存储引擎又有很多种,那么 MySQL 中分别又有那些,怎么优雅的使用呢? 划分引擎原因 在文件系统中,MySQL 将每个数据
2022-05-24

MySQL INSERT锁与数据库存储引擎选择

在MySQL中,INSERT操作会涉及到行级锁以及存储引擎的选择。行级锁:在MySQL中,插入操作会涉及到行级锁。当一个INSERT操作执行时,MySQL会在表中插入新的行,并在该行上设置一个写锁,其他事务将无法同时对这行进行修改。这样可以
MySQL INSERT锁与数据库存储引擎选择
2024-08-19

MySQL的存储引擎InnoDB选择了B+ 树

我们知道数据的存储和检索是两个很重要的功能,当我们的数据量大了,怎么能快速的检索数据呢,答案是使用索引,可索引具体的技术实现有很多,选择哪一种呢,我就以mysql为例记录下它为什么选择了B+树作为索引的实现方式。 1.  索引简介   索引是一种用于快速查询行
MySQL的存储引擎InnoDB选择了B+ 树
2015-08-15

MySQL存储引擎选择与优化的项目经验分享

MySQL存储引擎选择与优化的项目经验分享在开发和管理MySQL数据库时,选择合适的存储引擎并进行相关的优化是至关重要的。存储引擎直接影响数据库的性能、可靠性和可扩展性。本文将分享我在项目中的MySQL存储引擎选择和优化的经验。一、存储引擎
MySQL存储引擎选择与优化的项目经验分享
2023-11-02

[MySQL--进阶篇]存储引擎的体系结构、简介、特点、选择

前言 ⭐Hello!这里是欧_aita的博客。 ⭐今日语录:不要在乎别人怎么看你,因为他们根本就没有时间,他们只关心他们自己。 ⭐个人主页:欧_aita ψ(._. )>⭐个人专栏: 数据结构与算法 MySQL数据库 存储
[MySQL--进阶篇]存储引擎的体系结构、简介、特点、选择
2023-12-22

如何实现MySQL底层优化:存储引擎的选择与性能对比

MySQL 是一种强大的开源关系型数据库,可用于各种规模的应用程序。MySQL 支持多种不同的存储引擎,如 MyISAM、InnoDB、Memory、CSV 等,不同的引擎具有不同的功能和性能特点。在进行 MySQL 底层优化时,存储引擎的
如何实现MySQL底层优化:存储引擎的选择与性能对比
2023-11-09

在创建MySQL表时,如何指定我选择的存储引擎而不是使用默认的存储引擎InnoDB?

创建MySQL表时,可以按如下方式指定存储引擎 -mysql> CREATE TABLE Student(id INTEGER PRIMARY KEY, Name VARCHAR(15))-> ENGINE = MyISAM;Query
2023-10-22

优化阿里云数据库MySQL性能从选择合适的存储引擎到定期维护

在云计算时代,MySQL数据库已经成为许多企业不可或缺的一部分。然而,随着数据量的增加和业务需求的多样化,MySQL数据库的性能问题逐渐显现。本文将从选择合适的存储引擎、优化查询语句、合理设置参数、定期维护等方面,详细阐述如何优化阿里云数据库MySQL性能,提高业务运行效率。一、选择合适的存储引擎存储引擎是MyS
优化阿里云数据库MySQL性能从选择合适的存储引擎到定期维护
2023-11-12

编程热搜

目录