🐌个人主页: 🐌 叶落闲庭
💨我的专栏:💨
c语言
数据结构
javaEE
操作系统
Redis
石可破也,而不可夺坚;丹可磨也,而不可夺赤。
MySQL
一、MySQL体系结构
- 连接层:
- 最上层是一些客户端和链接服务,主要完成一些类似于连接处理、授权认证、及相关的安全方案。服务器也会为安全接入的每个客户端验证它所具有的操作权限。
- 服务层:
- 第二层架构主要完成大多数的核心服务功能,如SQL接口,并完成缓存的查询,SQL的分析和优化,部分内置函数的执行。所有跨存储引擎的功能也在这一层实现,如过程、函数等
- 引擎层:
- 存储引擎真正的负责了MySQL中数据的存储和提取,服务器通过AP和存储引擎进行通信。不同的存储引擎具有不同的功能,这样我们可以根据自己的需要,来选取合适的存储引擎
- 存储层:
- 主要是将数据存储在文件系统之上,并完成与存储引擎的交互。
二、存储引擎简介
存储引擎是MySQL当中核心的部分,是MySQL当中特有的,是MySQL当中存储数据、建立索引、更新/查询数据等操作的实现方式,不同的存储引擎在实现存储数据、建立索引、更新/查询数据等操作的机制是不一样的,存储引擎是基于表的,而不是基于数据库的,所以在一个数据库下的多张表是可以基于不同的存储引擎的,存储引擎也可被称为表的类型。
- 查询当前数据库支持的存储引擎:
show create table 表名
- MySQL默认存储引擎是InnoDB
- 在创建表时,指定存储引擎:
CREATE TABLE `user` (
`userId` int NOT NULL AUTO_INCREMENT,
`userName` varchar(50) NOT NULL,
`password` varchar(50) NOT NULL,
`gender` smallint NOT NULL,
`createTime` datetime DEFAULT NULL,
`updateTime` datetime DEFAULT NULL,
PRIMARY KEY (`userId`),
UNIQUE KEY `userName` (`userName`)
) ENGINE = InnoDB
- 查看当前数据库支持的存储引擎:
show engines;
三、存储引擎特点
3.1 InnoDB介绍
- InnoDB是一种兼顾高可靠性和高性能的通用存储引擎,在MySQL5.5之后,InnoDB是默认的MySQL存储引擎
- 特点:
- DML操作遵循ACID模型,支持事务
- 行级锁,提高并发访问性能
- 支持外键FOREIGN KEY约束,保证数据的完整性和正确性
- 文件:
- xxx.ibd:xxx代表的是表名,innoDB引擎的每张表都会对应这样一个表空间文件,存储该表的表结构(frm、sdi)、数据和索引。
- 参数:innodb_file_per_table
打开MySQL的数据存放目录,选择当前操作的数据库的文件夹,可以看到文件名为表名,后缀名为ibd的文件,也就是每一个InnoDB引擎的表都会有这样的一个表空间文件,在这个表空间文件中,记录了当前数据库的表结构和当前数据库表的数据和索引
- 如果想要查看文件中的信息,可以通过cmd的方式,输入cmd指令
ib2sdi 表名.ibd
: - 逻辑存储结构:
- TableSpace:表空间
- Segment:段
- Extent:区
- Page:页
- Row:行
3.2 MyISAM介绍
- MyISAM是MySQL早期的默认存储引擎
- 特点:
- 不支持事务,不支持外键
- 支持表锁,不支持行锁
- 访问速度快
- 文件:
- xxx.sdi:存储表结构信息
- xxx.MYD:存储数据
- xxx.MYI:存储索引
xxx.sdi存放的就是表结构信息,可以直接打开,里面是json格式的数据:
xxx.MYD是存放数据的
xxx.MYI是存放索引的
{
"mysqld_version_id":80031,
"dd_version":80023,
"sdi_version":80019,
"dd_object_type":"Table",
"dd_object":{
"name":"my_myisam",
"mysql_version_id":80031,
"created":20231012131516,
"last_altered":20231012131516,
"hidden":1,
"options":"avg_row_length=0;key_block_size=0;keys_disabled=0;pack_record=1;stats_auto_recalc=0;stats_sample_pages=0;",
"columns":[
{
"name":"id",
"type":4,
"is_nullable":true,
"is_zerofill":false,
"is_unsigned":false,
"is_auto_increment":false,
"is_virtual":false,
"hidden":1,
"ordinal_position":1,
"char_length":11,
"numeric_precision":10,
"numeric_scale":0,
"numeric_scale_null":false,
"datetime_precision":0,
"datetime_precision_null":1,
"has_no_default":false,
"default_value_null":true,
"srs_id_null":true,
"srs_id":0,
"default_value":"",
"default_value_utf8_null":true,
"default_value_utf8":"",
"default_option":"",
"update_option":"",
"comment":"",
"generation_expression":"",
"generation_expression_utf8":"",
"options":"interval_count=0;",
"se_private_data":"",
"engine_attribute":"",
"secondary_engine_attribute":"",
"column_key":1,
"column_type_utf8":"int",
"elements":[
],
"collation_id":255,
"is_explicit_collation":false
},
{
"name":"name",
"type":16,
"is_nullable":true,
"is_zerofill":false,
"is_unsigned":false,
"is_auto_increment":false,
"is_virtual":false,
"hidden":1,
"ordinal_position":2,
"char_length":40,
"numeric_precision":0,
"numeric_scale":0,
"numeric_scale_null":true,
"datetime_precision":0,
"datetime_precision_null":1,
"has_no_default":false,
"default_value_null":true,
"srs_id_null":true,
"srs_id":0,
"default_value":"",
"default_value_utf8_null":true,
"default_value_utf8":"",
"default_option":"",
"update_option":"",
"comment":"",
"generation_expression":"",
"generation_expression_utf8":"",
"options":"interval_count=0;",
"se_private_data":"",
"engine_attribute":"",
"secondary_engine_attribute":"",
"column_key":1,
"column_type_utf8":"varchar(10)",
"elements":[
],
"collation_id":255,
"is_explicit_collation":false
}
],
"schema_ref":"demo1",
"se_private_id":18446744073709551615,
"engine":"MyISAM",
"last_checked_for_upgrade_version_id":0,
"comment":"",
"se_private_data":"",
"engine_attribute":"",
"secondary_engine_attribute":"",
"row_format":2,
"partition_type":0,
"partition_expression":"",
"partition_expression_utf8":"",
"default_partitioning":0,
"subpartition_type":0,
"subpartition_expression":"",
"subpartition_expression_utf8":"",
"default_subpartitioning":0,
"indexes":[
],
"foreign_keys":[
],
"check_constraints":[
],
"partitions":[
],
"collation_id":255
}
}
3.3 Memory介绍
- Memory引擎的表数据时存储在内存中的,由于受到硬件问题、或断电问题的影响,只能将这些表作为临时表或缓存使用。
- 特点:
- 内存存放
- 支持hash索引(默认)
- 文件:
- xxx.sdi:存储表结构信息
四、存储引擎区别(InnoDB、MyISAM 和 Memory)
特点 | InnoDB | MyISAM | Memory |
---|---|---|---|
存储限制 | 64TB | 有 | 有 |
事务安全 | 支持 | - | - |
锁机制 | 行锁 | 表锁 | 表锁 |
B+tree索引 | 支持 | 支持 | 支持 |
Hash索引 | - | - | 支持 |
全文索引 | 支持(5.6版本之后) | 支持 | - |
空间使用 | 高 | 低 | N/A |
内存使用 | 高 | 低 | 中等 |
批量插入速度 | 低 | 高 | 高 |
支持外键 | 支持 | - | - |