mysql数据库学习之高级进阶(七)
文章目录
一、存储引擎
1.1 MySQL体系结构
层级 | 核心组件 | 职责 | 特点 |
---|---|---|---|
连接层 | 连接池、认证 | 管理客户端连接、权限验证 | 网络通信基础 |
服务层 | SQL接口、解析器、优化器 | SQL处理、优化、内置函数 | 跨存储引擎,MySQL大脑 |
引擎层 | InnoDB、MyISAM等 | 数据存储、索引、事务 | 可插拔,MySQL精髓 |
存储层 | 数据文件、日志文件 | 数据持久化 | 最终落盘位置 |
1.2 存储引擎
-
简介
-
存储引擎就是存储数据、建立索引、更新/查询数据等技术的实现方式。
-
存储引擎是基于表而不是基于库的,所以存储引擎也可以被称为表引擎,默认存储引擎是InnoDB。
-
-
相关操作
-- 查询建表命令 show create table account;-- 建表时指定存储引擎 CREATE TABLE 表名(... ) ENGINE=INNODB;-- 查看当前数据库支持的存储引擎 mysql> show engines; +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+ | Engine | Support | Comment | Transactions | XA | Savepoints | +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+ | InnoDB | DEFAULT | Supports transactions, row-level locking, and foreign keys | YES | YES | YES | | MRG_MYISAM | YES | Collection of identical MyISAM tables | NO | NO | NO | | MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | NO | | BLACKHOLE | YES | /dev/null storage engine (anything you write to it disappears) | NO | NO | NO | | MyISAM | YES | MyISAM storage engine | NO | NO | NO | | CSV | YES | CSV storage engine | NO | NO | NO | | ARCHIVE | YES | Archive storage engine | NO | NO | NO | | PERFORMANCE_SCHEMA | YES | Performance Schema | NO | NO | NO | | FEDERATED | NO | Federated MySQL storage engine | NULL | NULL | NULL | +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+ 9 rows in set (0.00 sec)
1.3 InnoDB
-
简介:InnoDB 是一种兼顾高可靠性和高性能的通用存储引擎,在 MySQL 5.5 之后,InnoDB 是默认的 MySQL 引擎
-
特点:
-
DML 操作遵循 ACID(事务的4大特性) 模型,支持事务
-
行级锁,提高并发访问性能
-
支持外键约束,保证数据的完整性和正确性
-
-
文件:
-
xxx.ibd: xxx代表表名,InnoDB 引擎的每张表都会对应这样一个表空间文件,存储该表的表结构(frm、sdi)、数据和索引。
-
可以通过指令查看:
SHOW VARIABLES LIKE 'datadir';
mysql> SHOW VARIABLES LIKE 'datadir'; +---------------+---------------------------------------------+ | Variable_name | Value | +---------------+---------------------------------------------+ | datadir | C:\ProgramData\MySQL\MySQL Server 5.7\Data\ | +---------------+---------------------------------------------+ 1 row in set, 1 warning (0.00 sec)
-
从idb文件提取表结构数据:ibd2sdi xxx.ibd
ibd2sdi xxx.ibd
-
-
参数:
-
innodb_file_per_table :是一个会话/全局变量,它控制 InnoDB 存储引擎如何为
新创建的表
分配表空间。- 当设置为
ON
(开启):每个 InnoDB 表会被存储在自己独立的.ibd
表空间文件 中。 - 当设置为
OFF
(关闭):所有 InnoDB 表的数据和索引都存储在共享的系统表空间文件(通常是ibdata1
) 中。
- 当设置为
-
**查看
innodb_file_per_table
变量是否打开:**show variables like ‘innodb_file_per_table’;mysql> show variables like 'innodb_file_per_table'; +-----------------------+-------+ | Variable_name | Value | +-----------------------+-------+ | innodb_file_per_table | ON | +-----------------------+-------+ 1 row in set, 1 warning (0.00 sec)
-
手动修改
innodb_file_per_table
变量的值-- 动态修改(立即生效,但对新建表有效) SET GLOBAL innodb_file_per_table = ON;-- 永久修改(需重启 MySQL):在 MySQL 配置文件(my.cnf 或 my.ini)中的 [mysqld] 部分添加或修改 [mysqld] innodb_file_per_table = ON
-
-
InnoDB 逻辑存储结构
1.4 MyISAM
-
简介:MyISAM 是 MySQL 早期的默认存储引擎。
-
特点:
-
不支持事务,不支持外键
-
支持表锁,不支持行锁
-
访问速度快
-
-
文件:
-
xxx.sdi: 存储表结构信息
-
xxx.MYD: 存储数据
-
xxx.MYI: 存储索引
-
1.5 Memory
-
简介:Memory 引擎的表数据是存储在内存中的,受硬件问题、断电问题的影响,只能将这些表作为临时表或缓存使用。
-
特点:
-
存放在内存中,速度快
-
hash索引(默认)
-
-
文件:
- xxx.sdi: 存储表结构信息
-
三大存储引擎的区别
特点 InnoDB MyISAM Memory 存储限制 64TB 有 有 事务安全 支持 - - 锁机制 行锁 表锁 表锁 B+tree索引 支持 支持 支持 Hash索引 - - 支持 全文索引 支持(5.6版本之后) 支持 - 空间使用 高 低 N/A 内存使用 高 低 中等 批量插入速度 低 高 高 支持外键 支持 - - 选择 如果应用对事物的完整性有比较高的要求,在并发条件下要求数据的一致性,数据操作除了插入和查询之外,还包含很多的更新、删除操作,则 InnoDB 是比较合适的选择 如果应用是以读操作和插入操作为主,只有很少的更新和删除操作,并且对事务的完整性、并发性要求不高,那这个存储引擎是非常合适的 将所有数据保存在内存中,访问速度快,通常用于临时表及缓存。Memory 的缺陷是对表的大小有限制,太大的表无法缓存在内存中,而且无法保障数据的安全性 -
电商中的足迹和评论适合使用 MyISAM 引擎,缓存适合使用 Memory 引擎。
1.6 性能分析
-
查看
增删改查
执行频次(INSERT, UPDATE, DELETE, SELECT)- SHOW GLOBAL STATUS LIKE
Com_______
; - SHOW SESSION STATUS LIKE
Com_______
;
- SHOW GLOBAL STATUS LIKE
-
示例
mysql> show global status like 'Com_______'; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | Com_binlog | 0 | | Com_commit | 1 | | Com_delete | 0 | | Com_insert | 9 | | Com_repair | 0 | | Com_revoke | 1 | | Com_select | 150 | | Com_signal | 0 | | Com_update | 28 | | Com_xa_end | 0 | +---------------+-------+ 10 rows in set (0.00 sec)
1.7 慢查询日志
-
简介:慢查询日志记录了所有执行时间超过指定参数(long_query_time,单位:秒,默认10秒)的所有SQL语句的日志。
-
**开启/关闭:**MySQL的慢查询日志默认没有开启,需要在MySQL的配置文件(/etc/my.cnf)中配置如下信息:(更改后记得重启MySQL服务,日志文件位置:/var/lib/mysql/localhost-slow.log)
# 开启慢查询日志开关 slow_query_log=1<