MYSQL存储引擎

存储引擎

MYSQL体系结构

MySQL的体系结构主要由以下几个层次组成:

1)连接层

连接层是MySQL的第一层,负责与MySQL客户端之间的通信,提供如连接处理、身份验证等基本服务。

在这一层,MySQL还引入了线程池的概念,为通过认证安全接入的客户端提供线程。

同样在这一层,也可以实现基于SSL的安全链接。服务器也会为安全接入的每个客户端验证它所具有的操作权限

2)服务层

服务层是MySQL的第二层,主要完成大部分的核心服务功能,包括查询解析、分析、优化、缓存、以及所有的内置函数,所有跨存储引擎的功能也在这一层实现,包括触发器、存储过程、视图等。

在这一层,MySQL会对用户传递的SQL语句进行解析,生成语法树,并进行语义解析,同时还会验证客户端是否具有执行该语句的权限。创建好语法树后,MySQL还会对SQL查询进行语法上的优化,进行查询重写。

3)引擎层

引擎层是MySQL的第三层,也是真正与磁盘进行交互,对数据进行存储和读取的部分

服务器通过API与存储引擎进行通信。

不同的存储引擎具有的功能不同,这样我们就可以根据自己的实际需要进行选取。

例如,InnoDB存储引擎提供了事务处理、外键约束等功能,而MyISAM存储引擎则提供了全文索引、静态表等功能。

4)存储层

存储层是MySQL的第四层,主要是将数据存储在运行于该设备的文件系统之上,并完成与存储引擎的交互。

在这一层,MySQL会将数据存储在运行于裸设备的文件系统之上,并完成与存储引擎的交互。

存储引擎

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

  2. 存储引擎是基于表的,而不是基于库的,所以存储引擎也可被称为表类型。我们可以在创建表的时候,来指定选择的存储引擎,如果没有指定将自动选择默认的存储引擎

1)建表时指定存储引擎

在MySQL中,你可以通过CREATE TABLE语句创建一个新的数据表,并在创建过程中指定存储引擎。具体的语法格式如下:

CREATE TABLE table_name (
   column1 datatype,
   column2 datatype,
   ...
) ENGINE = storage_engine;

在这里,table_name是你想要创建的新表的名字,column1 datatype定义了表的列,datatype是对应列的数据类型,storage_engine则是你希望使用的存储引擎。
例如,如果你想创建一个名为employee的表,其中包含idnameage三个列,并且你想使用InnoDB存储引擎,你可以这样做:

CREATE TABLE employee (
   id INT,
   name VARCHAR(255),
   age INT
) ENGINE = InnoDB;

在这个例子中,id是整数类型,name是最大长度为255的字符串类型,age也是整数类型。这些列都使用了InnoDB存储引擎。

2)查询当前数据库支持的存储引擎

show engines ;

3)修改表的存储引擎

如果你想改变已有的表的存储引擎,你可以使用ALTER TABLE语句。例如,如果你想将employee表的存储引擎改为MyISAM,你可以这样做:

ALTER TABLE employee ENGINE = MyISAM;

请注意,这种更改只会影响新插入的数据,已经存在的数据仍会按照原来的存储引擎进行处理。

常用的存储引擎

InnnDB

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

特点

1事务处理

InnoDB支持事务处理,这意味着你可以同时执行多个操作,而且这些操作要么全部成功,要么全部失败。如果其中一个操作失败,那么其他的操作也会被回滚。

2行级锁定,也支持表锁

InnoDB支持行级锁定,这意味着在并发环境中,只有正在执行的操作会影响到的行才会被锁定,其他行仍然可以被其他事务访问。

3外键约束

InnoDB支持外键约束,这意味着你可以确保数据的一致性。例如,如果你在一个表中定义了一个外键,那么在另一个表中必须有一个对应的值。

4文件

xxx.ibd:xxx代表的是表名,innoDB引擎的每张表都会对应这样一个表空间文件

逻辑表结构

InnoDB存储引擎的逻辑存储结构主要包括以下几个层次:表空间(Tablespace)、段(Segment)、区(Extent)、页(Page)和行(Row)。

表空间(Tablespace)

表空间是InnoDB逻辑结构的最高层,所有的数据都放在表空间中。

在默认情况下,InnoDB存储引擎都有一个共享表空间ibdata1,即所有数据都存放在这个表空间内。如果用户启用了参数innodb_file_per_table,则每张表内的数据可以单独放到一个表空间内。

段(Segment)

表空间是由各个段组成的,常见的段有数据段、索引段、回滚段等。

InnoDB存储引擎表是索引组织(index organized)的,因此数据即索引,索引即数据。那么数据段即为B+树的叶子节点(Leaf node segment),索引段即为B+树的非索引节点(Non-leaf node segment)。

区(Extent)

区是由连续页组成的空间,在任何情况下每个区的大小都为1MB。

为了保证区中页的连续性,InnoDB存储引擎一次从磁盘申请4-5个区。在默认情况下,InnoDB存储引擎的页的大小为16KB,即一个区中应有64个连续的页。

页(Page)

页是InnoDB存储引擎磁盘管理的最小单位,默认16kb,可以通过参数innodb_page_size设置页大小为4K、8K、16K。

行(Row)

行是InnoDB存储引擎中最小的数据单元,一行通常包含了一列或多列的数据。

MYISAM

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

特点

1不支持事务

不能同时执行多个操作

2 支持表级锁定,不支持行锁

在对表进行任何操作时,其他对表的访问都会被阻塞

这可能导致并发性能较低,但对于读操作密集的场景,这种锁定方式可以提高性能。

3 B+树索引

MyISAM使用B+树索引,提供了快速的查询性能

4 文件

xxx.sdi:存储表结构信息

xxx.MYD: 存储数据

xxx.MYI: 存储索引

总的来说,MyISAM是一个简单易用的存储引擎,适合于一些不需要事务处理和高并发性能的应用场景。

Memory

1). 介绍

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

临时表或缓存使用。

2). 特点

内存存放

hash索引(默认)

3).文件

xxx.sdi:存储表结构信息

在这里插入图片描述

选择

InnoDB

  • 如果你需要事务处理:InnoDB是首选,因为它支持事务处理,并且提供了行级锁定机制,这使得它在并发环境下的性能表现优秀。
  • 如果你的应用程序需要高可用性:InnoDB提供了自动故障恢复和多版本并发控制(MVCC),这使得它在处理大型、关键业务系统时更加可靠。
  • 如果你的表经常需要修改或者更新:InnoDB更适合,因为它支持事务处理,可以确保数据的一致性。

MyISAM

  • 如果你的应用程序主要是读取数据:MyISAM可能是一个更好的选择,因为它不支持事务处理,所以在写入数据时会更快。
  • 如果你的应用程序不需要事务处理:MyISAM也是一个不错的选择,因为它不支持事务处理,所以它的设计更加简单,运行起来也更高效。

Memory

  • 如果你的应用程序需要快速访问数据:Memory可能是最好的选择,因为它把所有的数据都存储在内存中,所以数据访问的速度非常快。
  • 如果你的应用程序需要临时存储数据:Memory也是一个很好的选择,因为当MySQL服务重新启动时,Memory存储引擎中的数据不会丢失。
  • 24
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值