一、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 |
内存使用 | 高 | 低 | 中等 |
批量插入速度 | 低 | 高 | 高 |
支持外键 | 支持 | - | - |