MySQL学习笔记-存储引擎

存储引擎

一. MySQL体系结构

image-20230328155149347

  • MySQL Server
    • 连接层:连接的处理、认证授权、安全方案、检查是否超过最大连接数等。
    • 服务层:SQL接口、解析器、查询优化器、缓存
    • 引擎层:引擎是数据存储和提取的方式,引擎层有许多引擎可供使用,也可以自定义引擎。索引是在存储引擎层实现的。
    • 存储层:存储数据库的相关数据,包括数据与日志等。

image-20230328155625162

二. 存储引擎简介

什么是存储引擎?

存储引擎是存储数据、建立索引、更新/查询数据等技术的实现方式。

存储引擎是基于表的,而不是基于库的,所以存储引擎也可被称为表类型

  • MySQL 5.5 之后默认存储引擎为InnoDB

image-20230328160011584

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

create table {表名}(
	...
)engine = {存储引擎} ...;

2. 查看当前数据库支持的存储引擎

show engines;

image-20230328160517473

三. 存储引擎特点

image-20230328164008325

1. InnoDB

InnoDB是一种兼顾高可靠性和高性能的通用存储引擎,在MySQL 5.5 之后,InnoDB是默认的MySQL存储引擎。

1.1 特点

  • DML操作遵循ACID模型,支持事务
  • 行级锁,提高并发访问性能;
  • 支持外键FOREIGN KEY约束,保证数据的完整性和准确性;

1.2 文件

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

  • 参数:innodb_file_per_table:决定是多张表共用一个共享表空间还是每个表都对应一个表空间,目前默认是打开的(每个表都对应一个表空间文件)

1.3 逻辑存储结构

  • TableSpace:表空间
  • Segment:段
  • Extent:区(大小固定:1M)(一个区包含64个页)
  • Page:页(大小固定:16K)
  • Row:行

image-20230328161823252

2. MyISAM

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

2.1 特点

  • 不支持事务,不支持外键
  • 支持表锁,不支持行锁
  • 访问速度快

2.2 文件

  • .MYD:表中存放的数据
  • .MYI:索引
  • .sdi:存储表结构信息

3. Memory

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

3.1 特点

  • 内存存放(快)
  • hash索引(默认)

3.2 文件

xxx.sdi:存储表结构信息

数据索引在内存中。

四. 存储引擎选择

选择存储引擎时,应该根据应用系统的特点选择合适的存储引擎。

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

image-20230328174749905

原文链接:https://www.cnblogs.com/yellowsea/p/17266163.html

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:MySQL学习笔记-存储引擎 - Python技术站

(0)
上一篇 2023年4月18日
下一篇 2023年4月18日

相关文章

  • MySQL 数据类型及最优选取规则

    MySQL 数据类型及最优选取规则 在使用 MySQL 数据库时,为了保证数据的正确性和效率,我们需要合理选择数据类型。本篇文章将讲解 MySQL 数据类型的分类、类型的特点以及如何选择最合适的数据类型。 数据类型的分类 MySQL 的数据类型可以分为以下几类: 整型:TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT。 浮点型:FL…

    MySQL 2023年5月19日
    00
  • 读SQL进阶教程笔记12_地址与三值逻辑

    1. SQL和数据库都在极力提升数据在表现层的抽象度,以及对用户隐藏物理层的概念 2. 关系模型是为摆脱地址而生的 2.1. “地址”不仅包括指针操作的地址,还包括数组下标等 3. 一个优雅的数据结构胜过一百行杂耍般的代码 3.1. 精巧的数据结构搭配笨拙的代码,远远好过笨拙的数据结构搭配精巧的代码 4. 编程中泛滥的地址 4.1. 我们可以使用的只有冯·诺…

    MySQL 2023年4月19日
    00
  • MySQL怎么过滤重复数据

    本篇内容主要讲解“MySQL怎么过滤重复数据”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“MySQL怎么过滤重复数据”吧! 方法1:加关键字 DISTINCT 在mysql中,可以利用“SELECT”语句和“DISTINCT”关键字来进行去重查询,过滤掉重复的数据,语法“SELECT DISTINCT 字段名 F…

    MySQL 2023年4月16日
    00
  • mysql高级、索引

    1.视图 # 引子 select * from emp left join dep on emp.dep_id = dep.id union select * from emp right join dep on emp.dep_id = dep.id; create view temp(emp_id,emp_name,salary,dep_id,dep_i…

    MySQL 2023年4月12日
    00
  • MySQL中的存储过程异常处理

    MySQL中的存储过程异常处理是非常重要的,可以帮助我们在处理大量数据时避免因异常而停止程序执行的情况。完整的攻略应包含以下内容: 创建存储过程 在创建存储过程时,需要使用DECLARE语句声明变量和异常处理器。语法如下: CREATE PROCEDURE procedure_name() BEGIN DECLARE variable_name dataty…

    MySQL 2023年5月18日
    00
  • mysql 启动1067错误及修改字符集重启之后复原无效问题

    针对“mysql 启动1067错误及修改字符集重启之后复原无效问题”这个问题,我将提供完整的攻略,具体包括以下几个步骤: 查看错误日志在遇到MySQL启动失败时,我们需要首先查看错误日志文件,确定具体错误原因。错误日志通常位于MySQL安装目录下的data文件夹中,文件名为主机名.err(主机名可以通过命令行输入”hostname”获取)。如果文件中有106…

    MySQL 2023年5月18日
    00
  • mysql的启动

    1。直接用mysqld手工启动 [root@ora11g bin]# ./mysqld –defaults-file=../my.cnf 140328 10:04:37 [ERROR] Fatal error: Please read “Security” section of the manual to find out how to run mysql…

    MySQL 2023年4月12日
    00
  • mysql 索引过长1071-max key length is 767 byte

      原因 数据库表采用utf8编码,其中varchar(255)的column进行了唯一键索引 而mysql默认情况下单个列的索引不能超过767位(不同版本可能存在差异)   于是utf8字符编码下,255*3 byte 超过限制   解决 1  使用innodb引擎; 2  启用innodb_large_prefix选项,将约束项扩展至3072byte; …

    MySQL 2023年4月12日
    00
合作推广
合作推广
分享本页
返回顶部