MySQL进阶 -存储引擎

news/2024/11/8 17:05:40/

目录

  • 存储引擎
    • MySQL的体系结构
    • 存储引擎简介
    • InnoDB存储引擎
    • MyISAM存储引擎
    • Memory存储引擎
    • InnoDB,MyISAM和Memory的区别
    • 存储引擎的选择
    • 小结

存储引擎

MySQL的体系结构

  • MySQL的体系结构图:
    在这里插入图片描述
    MySQL服务端的体系结构(MySQL Server):
    分层,分为连接层,服务层,存储引擎层,存储层。

  • 连接层:
    主要是接收客户端的连接,完成一些连接处理,以及一些认证授权的操作(例如用户的登录等),一些安全方案,检查是否超过最大连接数等

  • 服务层:
    绝大多数核心功能都是在服务层完成的,像SQL接口,查询解析器,查询优化器,查询缓存,所有的跨存储引擎的实现也都是在服务层完成的

  • 存储引擎层:
    MySQL本身提供了很多的存储引擎,如果感觉不行还可以进行扩展,存储引擎控制的就是MySQL中数据提取和存入的方式,服务器会通过API和存储引擎进行通信,交互,索引就是在存储引擎层实现的,不同的存储引擎索引的结构是不一样的

  • 存储层:
    数据存储的地方

在这里插入图片描述

存储引擎简介

存储引擎是MySQL中特有的

存储引擎就是存储数据,建立索引,更新/查询数据等技术的实现方式。存储引擎是基于的,而不是基于库,所以存储引擎也可被称为表类型

一个数据库下的多张表可以选择不同的存储引擎

MySQL默认的存储引擎是InnoDB

查询建表语句:

show create table 表名;-- 可以查询到建立这张表的SQL语句
show create table account;CREATE TABLE `account` (`id` int NOT NULL AUTO_INCREMENT COMMENT 'ID',`name` varchar(10) DEFAULT NULL COMMENT '姓名',`money` int DEFAULT NULL COMMENT '储蓄',PRIMARY KEY (`id`)
) 
ENGINE=InnoDB -- 默认存储引擎InnoDB
AUTO_INCREMENT=3 -- 自增的下一个id值
DEFAULT CHARSET=utf8mb4 -- 当前表的字符集
COLLATE=utf8mb4_0900_ai_ci -- 默认排序方式
COMMENT='账户表'
  • 创建表时指定存储引擎:
CREATE TABLE 表名(字段1 字段1类型 [COMMENT 字段1注释],......字段n 字段n类型 [COMMENT 字段n注释]	
)ENGINE=INNODB[COMMENT 表注释] -- 这里engine后跟的就是存储引擎名create table 表名(字段1 字段1类型 [comment 字段1注释],......字段n 字段n类型 [comment 字段n注释]	
)engine=innodb[comment 表注释] -- 这里engine后跟的就是存储引擎名
  • 查看当前数据库支持的存储引擎:
SHOW ENGINES;show engines;

练习:

create table my_myisam(id int primary key auto_increment comment 'ID',name varchar(10) comment 'name'
)engine =myisam;
show create table my_myisam;CREATE TABLE `my_myisam` (`id` int NOT NULL AUTO_INCREMENT COMMENT 'ID',`name` varchar(10) DEFAULT NULL COMMENT 'name',PRIMARY KEY (`id`)
) ENGINE=MyISAM 
DEFAULT CHARSET=utf8mb4 
COLLATE=utf8mb4_0900_ai_ci

InnoDB存储引擎

InnoDB存储引擎是MySQL中一种兼顾高可靠性和高性能的通用存储引擎,在MySQL5.5之后,InnoDB就是MySQL的默认存储引擎;

  • InnoDB的特点:
    1.InnoDB的DML操作遵循ACID(事务的四大特性)模型,支持事务。

    2.行级锁,提高并发访问性能

    3.支持外键FOREIGN KEY(foreign key)约束,保证数据的完整性和正确性

    用三个词概括就是:事务,外键,行级锁

  • InnoDB引擎所涉及到的磁盘文件:
    在InnoDB中,每一个表都会对应一个表空间文件(xxx.ibd,xxx是表名),这个文件会存储该表的:表结构(frm,sdi),数据和索引

    此外还有一个参数:innodb_file_per_table
    这个参数可以决定是多张表共用一个表文件还是一张表对应一个表文件,打开就代表一张表对应一个表文件,关闭相反,MySQL默认打开

    查看参数innodb_file_per_table的状况:

    show variables like 'innodb_file_per_table';
    

    使用指令:idb2sdi 表名.idb可以查看idb文件的情况

  • InnoDB引擎的逻辑存储结构
    主要分为5段:
    1.TableSpece:表空间
    2.Segment:段
    3.Extent:区
    4.Page:页
    5.Row:行
    在这里插入图片描述

MyISAM存储引擎

MyISAM是MySQL早期的默认存储引擎

  • MyISAM存储引擎特点:
    1.不支持事务,不支持外键

2.支持表锁,不支持行锁

3.访问速度块

  • MyISAM存储引擎所涉及到的磁盘文件
    有三个:xxx.MYD, xxx.MYI, xxx.sdi(xxx是表名)

    MYD:存储数据
    sdi:存储表结构信息
    MYI:存储索引

Memory存储引擎

Memory存储引擎的表数据存放在内存中,由于数据存放在内存中,所以会收到硬件或断电问题的影响,这些影响可能会导致数据丢失,所以,使用Memory存储引擎的表一般当作临时表或缓存使用

  • Memory存储引擎的特点:
    1.数据存放在内存中。访问速度块

    2.默认是hash索引

  • Memory存储引擎所涉及到的磁盘文件
    只有xxx.sdi文件,用来存放表的结构信息,表的数据等信息都存放在内存中

InnoDB,MyISAM和Memory的区别

在这里插入图片描述

存储引擎的选择

在选择存储引擎时,应该根据应用系统的特点选择合适的存储引擎,对于复杂的应用系统,还可以根据实际情况选择多种存储引擎进行组合

  • InnoDB的应用场景
    如果应用对事务的完整性有比较高的要求,在并发条件下要求数据的一致性,数据操作除了插入和查询之外,还包含很多的更新,删除操作,那么使用InnoDB存储引擎是比较合适的选择,例如:业务中的日志数据,电商中评论和足迹等

  • MyISAM的应用场景
    如果应用是以读取操作和插入操作为主,只有很少的更新和删除操作,并且对事务的完整性、并发性要求不是很高,那么选择MyISAM是很合适的

  • Memoey的应用场景
    因为Memoey将数据存放在内存中,访问速度块,所以常用于临时表和缓存,Memory的缺陷就是对表的大小有限制,太大的表无法缓存在内存中,而且无法保障数据的安全性

绝大多数使用的存储引擎还是InnoDB,后面两个都被新的数据库的存储引擎给替代了

小结

在这里插入图片描述


http://www.ppmy.cn/news/109986.html

相关文章

CAPL(vTESTStudio) - CAPL、CANoe、Panel联动

目录 一、变量设置 ① dbc文件中的Environment variables变量

01- 线程和进程,并发和并行(Windows系统)

要点: 进程是操作系统资源分配的基本单位,而线程是处理器任务调度和执行的基本单位。 参考文章:Python3多进程(mutiprocessing) 一 线程和进程的区别 主要介绍了线程和进程的区别及Python代码实例,本文给出了一个python的脚本让一个进程中…

手机常识汇总

目录 一、手机历史介绍 第一代模拟制式手机(1G) 什么是模拟网? 模拟网络与数字网络的区别 数字通信与模拟通信相比具有明显的优点: 第二代数字手机(2G) 什么是“GSM” 什么是 “CDMA”? GSM 数字机和模拟手机话音相比 什么是“GSM/CDMA 双模机”? 什么是“TDMA”…

spring cloud Alibaba之Nacos Discovery--服务治理 (二)

接着上一篇文章 搭建的微服务环境, 实现nacos 注册中心实战操作案例 一. 服务治理介绍 先来思考一个问题 通过上一章的操作,我们已经可以实现微服务之间的调用。但是我们把服务提供者的网络地址 (ip,端口)等硬编码到了代码中&a…

在Centos Stream 9上Docker的实操教程(四) - Docker腾讯云远程仓库和本地私有仓库

在Centos Stream 9上Docker的实操教程 - Docker腾讯云远程仓库和本地私有仓库 本地镜像发布到腾讯云注册开通腾讯云初始化个人版服务创建仓库推送拉取镜像 私有仓库结语 本地镜像发布到腾讯云 由于官方的docker hub访问由于网络原因,可能会比较慢,博主推…

浙大知识图谱基础:学习笔记

0 基础知识 知识图谱中,知识的结构化表示主要有符号表示和向量表示两类方法。符号表示包括:一阶谓词逻辑,语义网络,描述逻辑和框架系统等。当前主要采用基于图的符号化知识表示,最常用的是有向标记图。 有向标记图分为…

玻璃制品行业丨外贸业务管理难点及解决方案

玻璃作为一种重要的建筑材料,在国际贸易中一直占有一定的份额。随着国外市场需求量的不断增加,对玻璃制品的技术含量要求越来越高,需要在研发方面的投入也逐步加大。由于国际市场竞争激烈,想要做玻璃制品行业的外贸公司&#xff0…

I.MX RT1170加密启动详解(2):Authenticated HAB认证原理

文章目录 1 基础2 使能过程3 Boot flow 1 基础 HAB认证是基于RSA或ECDSA算法的公钥密码学,它用一系列的私钥对image进行加密,然后BootROM在上电后用对应的公钥验证加密的镜像是否被修改。这个密钥结构就是PKI(Public Key Infrastructure)树 (1)normal …