mysql从入门到精通高级篇mysql表的存储引擎,innodb与myisam的对比(代码片段)

码农飞哥 码农飞哥     2022-11-29     296

关键词:

您好,我是码农飞哥,感谢您阅读本文,欢迎一键三连哦
💪🏻 1. Python基础专栏,基础知识一网打尽,9.9元买不了吃亏,买不了上当。 Python从入门到精通
❤️ 2. Python爬虫专栏,系统性的学习爬虫的知识点。9.9元买不了吃亏,买不了上当 。python爬虫入门进阶
❤️ 3. Ceph实战,从原理到实战应有尽有。 Ceph实战
❤️ 4. Java高并发编程入门,打卡学习Java高并发。 Java高并发编程入门
😁 5. 社区逛一逛,周周有福利,周周有惊喜。码农飞哥社区,飞跃计划
全网同名【码农飞哥】欢迎关注,个人VX: wei158556

文章目录

1. 简介

上一篇文章介绍了MySQL中SQL语句的执行流程 【MySQL从入门到精通】【高级篇】(五)MySQL的SQL语句执行流程,在介绍执行流程时提到了InnoDB和MyISAM两种存储引擎。这篇文章将来详细介绍下这两种存储引擎。

为了管理方便,人们把连接管理、查询缓存、语法解析、查询优化这些并不涉及真实数据存储的功能划分为MySQL server的功能,把真实存储数据的功能划分为存储引擎的功能。所以在MySQL Server完成了查询优化后,只需要按照生成的执行计划调用底层存储引擎提供的API,获取到数据后返回给客户端即可。
存储引擎就是指表的类型。其实存储引擎以前叫做表处理器,后来改成存储引擎,它的功能就是接收上层传下来的指令,然后对表中的数据进行提取或写入操作。

2. 环境

环境版本
Red Hat4.8.5-39
MySQL5.7

1. 查看存储引擎

show engines


查询结果显示,MySQL 5.7支持9种存储引擎,分别为 MEMORY、MRG_MYISAM、CSV、FEDEATED、PERFORMANCE_SCHEMA、MYIASM、InnoDB、BLACKHOLE和ARCHIVE。

  1. Engine参数表示存储引擎的名称。
  2. Support参数表示MySQL数据库管理系统是否支持该存储引擎:YES表示支持,NO表示不支持。
  3. Comment参数表示对存储引擎的描述
  4. Transaction参数表示存储引擎是否支持事务:YES表示支持,NO表示不支持。
  5. XA参数表示存储引擎所支持的分布式是否符合XA规范;YES表示支持,NO表示不支持,代表着该存储引擎是否支持分布式事务。
  6. Savepoints参数表示存储引擎是否支持事务处理的保存点;YES表示支持,NO表示不支持,也就是说,存储引擎是否支持部分事务回滚。

2. 查询默认的存储引擎

show variables like '%storage_enginee%'


MySQL 5.5之前默认的存储引擎是MyISAM,在MySQL 5.5之后默认的存储引擎是InnoDB。

  • 修改默认的存储引擎
    如果在创建表的语句中没有显式指定表的存储引擎的话,那么默认就会使用InnoDB作为表的存储引擎,如果我们想要改变表的默认存储引擎的话,可以在启动服务器的时候执行如下命令:
SET DEFAULT_STORAGE_ENGINE=MyISAM;

或者修改my.cnf文件:

default-storage-engine=MyISAM
# 重启
systemctl restart mysqld.service

3. 设置表的存储引擎

存储引擎是负责对表中的数据进行提取和写入工作的,我们可以对不同的表设置不同的存储引擎。也就是说不同的数据表可以有不同的存储结构,不同的提取和写入方式。

3.1. 创建表时执行存储引擎

我们之前创建表的语句都没有指定表的存储引擎,那就会使用默认的存储引擎InnoDB。如果我们想显式的指定一下存储引擎,那可以这么写:

CREATE TABLE 表名(
  建表语句;
)ENGINE=存储引擎名称;

比如我们想创建一个存储引擎为MyISAM的表可以这么写;

mysql> CREATE TABLE engine_demo_table(name varchar(20)) ENGINE=MyISAM;
Query OK, 0 rows affected (0.01 sec)

4. 存储引擎介绍

4.1. InnoDB存储引擎:具备外键支持功能的事务存储引擎

  1. InnoDB是MySQL的默认事务型引擎,它被设计用来处理大量的短期(short-lived)事务。可以确保事务的完整提交(Commit)和回滚(Rollback)。
  2. 除了增加和查询外,还需要更新,删除操作,那么,应优先选择InnoDB存储引擎。
  3. 除非有非常特别的原因需要使用其他的存储引擎,否则应该优先考虑InnoDB引擎。
  4. 数据文件结构:
    表名.frm 存储表结构(在My8.0时,合并在表名.ibd中)
    表名.ibd存储数据和索引 (索引即数据)
  5. InnoDB是为了处理大数据量的最大性能设计。
  6. 对比MyISAM的存储引擎,InnoDB写的处理效率差一些,并且会占用更多的磁盘空间以保存数据和索引。
  7. MyISAM只缓存索引,不缓存真实数据;InnoDB不仅仅缓存索引还缓存真实数据,对内存要求较高,而且内存大小对性能有决定性的影响。

4.2. MyISAM引擎:主要的非事务处理存储引擎

MyISAM提供了大量的特性,包含全文索引、压缩、空间函数(GIS)等,但MyISAM不支持事务,行级锁,外键,有一个毫无疑问的缺陷就是崩溃后无法完全恢复。
5.5之前默认的存储引擎。

  1. 优势就是访问的速度快,对事务完整性没有要求或者以SELECT、INSERT为主的应用。
  2. 针对数据统计有额外的常数存储。故而count(*)的查询效率很高。
  3. 数据文件结构:
    表名.frm 存储表结构
    表名.MYD 存储数据(MYData)
    表名.MYI 存储索引(MYIndex)
    应用场景:只读应用或者以读为主的业务。
    MyISAM和InnoDB的对比项。
对比项MyISAMInnoDB
外键不支持支持
事务不支持支持
行表锁表锁,即使操作一条记录也会锁住整个表,不适合高并发的操作行锁,操作时只锁某一行,不对其他行有影响,适合高并发的操作
缓存只缓存索引,不缓存真实数据不仅缓存索引还要缓存真实数据,对内存要求较高,而且内存大小对性能有决定性的影响
自带系统表使用YN
关注点性能:节省资源,消耗少,简单业务事务:并发写,事务,更大资源
默认安装YY
默认使用NY

总结

本文主要介绍MySQL中两种常见的存储引擎,分别是InnoDB和MyISAM,InnoDB作为MySQL5.5之后默认的存储引擎,它的优点是支持事务和行级锁,索引即数据。而MyISAM的优点是访问速度快,索引和真实数据是分开的。

《黑马程序员mysql数据库入门到精通,从mysql安装到mysql高级mysql优化全囊括》——学习笔记进阶篇(代码片段)

...用作个人笔记使用,整理自《黑马程序员MySQL数据库入门到精通,从MySQL安装到MySQL高级、MySQL优化全囊括》(https://www.bilibili.com/video/BV1Kr4y1i7ru/)存储引擎MySQL体系结构连接层最上层是一些客户端和连接服务,主要完成一... 查看详情

mysql从入门到精通高级篇设计一个索引&innodb中的索引方案(代码片段)

...网打尽,9.9元买不了吃亏,买不了上当。Python从入门到精通❤️2.Python爬虫专栏,系统性的学习爬虫的知识点。9.9元买不了吃亏,买不了上当。python爬虫入门进阶❤️3.Ceph实战,从原理到实战应有尽有。Ceph实... 查看详情

java高级教程gradle从入门到精通

MySQL数据库最佳学习线路脑图:一、对MySQL的认识认识Mysql数据库下载安装MySQL软件在Linux系统环境下安装MySQLMySOL体系结构与存储引擎MySQL体系结构QueryCache详解存储引擎InnoDB体系结构InnoDB的三大特性.数据库文件参数文件参数类... 查看详情

mysql从入门到精通高级篇mysql权限管理与控制(代码片段)

...网打尽,9.9元买不了吃亏,买不了上当。Python从入门到精通❤️2.Python爬虫专栏,系统性的学习爬虫的知识点。9.9元买不了吃亏,买不了上当。python 查看详情

mysql从入门到精通高级篇innodb数据存储结构概述(代码片段)

...网打尽,9.9元买不了吃亏,买不了上当。Python从入门到精通❤️2.Python爬虫专栏,系统性的学习爬虫的知识点。9.9元买不了吃亏,买不了上当。python爬虫入门进阶❤️3.Ceph实战,从原理到实战应有尽有。Ceph实... 查看详情

mysql从入门到精通高级篇innodb数据存储结构概述(代码片段)

...网打尽,9.9元买不了吃亏,买不了上当。Python从入门到精通❤️2.Python爬虫专栏,系统性的学习爬虫的知识点。9.9元买不了吃亏,买不了上当。python爬虫入门进阶❤️3.Ceph实战,从原理到实战应有尽有。Ceph实... 查看详情

mysql从入门到精通高级篇mysql的sql语句执行流程(代码片段)

...网打尽,9.9元买不了吃亏,买不了上当。Python从入门到精通❤️2.Python爬虫专栏,系统性的学习爬虫的知识点。9.9元买不了吃亏,买不了上当。python 查看详情

mysql从入门到精通高级篇mysql用户的创建_修改_删除以及密码的设置(代码片段)

...网打尽,9.9元买不了吃亏,买不了上当。Python从入门到精通❤️2.Python爬虫专栏,系统性的学习爬虫的知识点。9.9元买不了吃亏,买不了上当。python 查看详情

mysql从入门到精通高级篇mysql用户的创建_修改_删除以及密码的设置(代码片段)

...网打尽,9.9元买不了吃亏,买不了上当。Python从入门到精通❤️2.Python爬虫专栏,系统性的学习爬虫的知识点。9.9元买不了吃亏,买不了上当。python 查看详情

mysql从入门到精通高级篇(二十六)建了索引就能用么?我看未必。来看看几种索引失效的情况吧

文章目录​​1.简介​​​​1.简介​​​​2.数据准备​​​​2.1.建表​​​​2.2.设置参数​​​​2.3.创建函数​​​​2.4.创建存储过程​​​​2.5.调用存储过程​​​​3.索引失效的情况​​​​3.1.索引使用的简单说明​... 查看详情

mysql从入门到精通高级篇mysql目录结构与表在文件系统中的表示(代码片段)

...网打尽,9.9元买不了吃亏,买不了上当。Python从入门到精通❤️2.Python爬虫专栏,系统性的学习爬虫的知识点。9.9元买不了吃亏,买不了上当。python 查看详情

mysql从入门到精通高级篇字符集的修改与底层原理(代码片段)

...网打尽,9.9元买不了吃亏,买不了上当。Python从入门到精通❤️2.Python爬虫专栏,系统性的学习爬虫的知识点。9.9元买不了吃亏,买不了上当。python 查看详情

mysql从入门到精通高级篇(二十九)覆盖索引的使用&索引下推(代码片段)

...网打尽,9.9元买不了吃亏,买不了上当。Python从入门到精通❤️2.网上优质的Python题库很少,这里给大家推荐一款非常棒 查看详情

mysql从入门到精通高级篇(二十五)explain中refrowsfilteredextra字段的剖析(代码片段)

...网打尽,9.9元买不了吃亏,买不了上当。Python从入门到精通❤️2.Python爬虫专栏,系统性的学习爬虫的知识点。9.9元买不了吃亏,买不了上当。python 查看详情

mysql从入门到精通高级篇(二十五)explain中refrowsfilteredextra字段的剖析(代码片段)

...网打尽,9.9元买不了吃亏,买不了上当。Python从入门到精通❤️2.Python爬虫专栏,系统性的学习爬虫的知识点。9.9元买不了吃亏,买不了上当。python 查看详情

mysql从入门到精通高级篇(二十五)explain中refrowsfilteredextra字段的剖析(代码片段)

...网打尽,9.9元买不了吃亏,买不了上当。Python从入门到精通❤️2.Python爬虫专栏,系统性的学习爬虫的知识点。9.9元买不了吃亏,买不了上当。python 查看详情

mysql从入门到精通高级篇(二十五)explain中refrowsfilteredextra字段的剖析(代码片段)

...网打尽,9.9元买不了吃亏,买不了上当。Python从入门到精通❤️2.Python爬虫专栏,系统性的学习爬虫的知识点。9.9元买不了吃亏,买不了上当。python 查看详情

mysql从入门到精通高级篇innodb的b+树索引的注意事项(代码片段)

...网打尽,9.9元买不了吃亏,买不了上当。Python从入门到精通❤️2.Python爬虫专栏,系统性的学习爬虫的知识点。9.9元买不了吃亏,买不了上当。python爬虫入门进阶❤️3.Ceph实战,从原理到实战应有尽有。Ceph实... 查看详情