MySQL- 存储引擎

news/2024/6/23 12:54:25

MySQL体系结构

连接层

最上层是一些客户端和链接服务,包含本地sock 通信和大多数基于客户端/服务端工具实现的类似于 TCP/IP的通信。主要完成一些类似于连接处理、授权认证、及相关的安全方案。在该层上引入了线程 池的概念,为通过认证安全接入的客户端提供线程。同样在该层上可以实现基于SSL的安全链接。服务 器也会为安全接入的每个客户端验证它所具有的操作权限

服务层

第二层架构主要完成大多数的核心服务功能,如SQL接口,并完成缓存的查询,SQL的分析和优化,部 分内置函数的执行。所有跨存储引擎的功能也在这一层实现,如 过程、函数等。在该层,服务器会解 析查询并创建相应的内部解析树,并对其完成相应的优化如确定表的查询的顺序,是否利用索引等, 最后生成相应的执行操作。如果是select语句,服务器还会查询内部的缓存,如果缓存空间足够大, 这样在解决大量读操作的环境中能够很好的提升系统的性能

引擎层

存储引擎层, 存储引擎真正的负责了MySQL中数据的存储和提取,服务器通过API和存储引擎进行通 信。不同的存储引擎具有不同的功能,这样我们可以根据自己的需要,来选取合适的存储引擎。数据库 中的索引是在存储引擎层实现的

存储层

数据存储层, 主要是将数据(如: redolog、undolog、数据、索引、二进制日志、错误日志、查询 日志、慢查询日志等)存储在文件系统之上,并完成与存储引擎的交互

存储引擎介绍

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

  1. 在创建表时, 指定存储引擎

Create table 表名() engine=innodb;

  1. 查询存储引擎

Show engines;

--- 查询建表语句

Show create table account;

存储引擎特点

InnoDB

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

特点

DML操作遵循ACID模型, 支持事务

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

支持外键foreign key约束, 保证数据的完整性和正确性

文件

xxx.ibd: xxx代表的是表名, innoDB引擎的每张表都会对应这样一个表空间文件, 存储该表的表结构(frm, sdi), 数据和索引。

参数: innodb_file_per_table

如果该参数开启,代表对于InnoDB引擎的表,每一张表都对应一个ibd文件

逻辑存储结构

表空间 : InnoDB存储引擎逻辑结构的最高层,ibd文件其实就是表空间文件,在表空间中可以 包含多个Segment段

段 : 表空间是由各个段组成的, 常见的段有数据段、索引段、回滚段等。InnoDB中对于段的管 理,都是引擎自身完成,不需要人为对其控制,一个段中包含多个区

区 : 区是表空间的单元结构,每个区的大小为1M。 默认情况下, InnoDB存储引擎页大小为 16K, 即一个区中一共有64个连续的页

页 : 页是组成区的最小单元,页也是InnoDB 存储引擎磁盘管理的最小单元,每个页的大小默 认为 16KB。为了保证页的连续性,InnoDB 存储引擎每次从磁盘申请 4-5 个区

行 : InnoDB 存储引擎是面向行的,也就是说数据是按行进行存放的,在每一行中除了定义表时 所指定的字段以外,还包含两个隐藏字段(后面会详细介绍)

MyISAM

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

特点

不支持事务, 不支持外键

支持表锁, 不支持行锁

访问速度快

文件

Xxx.sdi: 存储表结构信息

Xxx.MYD: 存储数据

Xxx.MYI: 存储索引

Memory

Memory引擎的表数据是存储在内存中的, 由于受到硬件问题, 或断电问题的影响, 只能将这表作为临时表或缓存使用

特点

内存存放

hash索引(默认)

文件

Xxx.sdi: 存储表结构信息

存储引擎的选择

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

InnoDB: Mysql默认的存储引擎, 支持事务, 外键。如果应用对事务的完整性有比较高的要求, 在并发条件下要求数据一致性, 数据操作除了插入和查询之外, 还包括很多的更新, 删除操作, 那么InnoDB是比较合适的选择

MyISAM: 如果应用是以读操作和插入操作为主, 只有很少的更新和删除操作, 并且对事务的完整性, 并发行要求不是很高, 那么可以选择这个引擎。现在被MongDB替代

Memory: 将所有数据保存在内存中, 访问速度快, 通常用于临时表及缓存。Memory的缺陷就是对表的大小有限制, 太大的表无法缓存在内存中, 而且无法保障数据的安全, 目前被Redis替代


https://www.xjx100.cn/news/306127.html

相关文章

更多的 bash shell 命令

章节目录: 一、监测进程1.1 探查进程1.2 实时监测进程1.3 结束进程 二、监测磁盘空间2.1 挂载存储设备2.2 使用 df 命令2.3 使用 du 命令 三、处理数据文件3.1 数据排序3.2 数据搜索3.3 数据压缩3.4 数据归档 四、结束语 本章内容: 进程管理获取磁盘统计…

Java如何判空

目录 前言 List的判空 String的判空 Optional 4.1 Optional对象的创建 4.2使用场景 前言 实际项目中我们会有很多地方需要判空校验,如果不做判空校验则可能产生NullPointerException异常。 针对异常的处理我们在上一篇有提及: 先来看一下实际项目…

把Kubernetes用于微服务管理的最佳实践

把Kubernetes用于微服务管理的最佳实践 一、 引言1 什么是 Kubernetes2 Kubernetes 的优势和应用场景3 为什么使用 Kubernetes 部署容器化应用程序 二、 准备工作1 安装 Kubernetes2 准备容器镜像3 准备 Kubernetes 配置文件 三、 部署应用程序1 创建 Kubernetes 命名空间2 创建…

Solidity中的函数和事件

Solidity是一种用于编写智能合约的编程语言,它是以太坊平台上最常用的语言之一。在Solidity中,函数和事件是合约的两个关键组成部分。函数用于定义合约中的行为和逻辑,而事件则用于实现合约与外部应用程序之间的通信和交互。本文将深入探讨So…

【mongoDB】mongodb权限验证 || mongodb重启 || mongodb常用命令

mongodb版本号 6.0 前言 mongoDB刚开始无需密码登录mongoDB有3默认数据库,分别为: admin 超级用户,能对所有数据库操作,执行管理员命令config 分片集群配置的数据库local 分片集群锁信息的集合test 这个数据库一般是隐式创建的&…

辉哥带你学hive第一讲 hive基本介绍以及环境搭建

文章目录 1.Hive介绍1.1 hive 基本情况1.2 Hive架构原理1.3 Hive 安装1.4 元数据配置1.5 hive 服务部署1.6Hive常用交互命令1.6.1 Hive参数配置方式1.Hive介绍 1.1 hive 基本情况 hive基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张表。 Hive是一个Hadoop客…

Apache Hive SQL DQL

Hive SQL--DQL-Select select语法树 SELECT [ALL | DISTINCT] select_expr, select_expr, ... FROM table_reference JOIN table_other ON expr [WHERE where_condition] [GROUP BY col_list [HAVING condition]] [CLUSTER BY col_list | [DISTRIBUTE BY col_list] [SORT BY|…

判断数组为空、含有某值,判断数据类型,判断空对象

👉js中判断空数组和空对象的方法_js 空数组_EntheosLee的博客-CSDN博客 👉JavaScript判断数组是否为空、 判断数据类型_javascript判断数组为空_webhyx的博客-CSDN博客 👉如何判断js数组是否为空_js判断数组为空_CodeChanningAz的博客-CSD…