默认库
- information_schema
保存了系统源数据 - mysql
数据库用户、权限 - performance_schema
服务器性能信息 - sys
系统信息
MySQL语法
- 用户
create user / set password / grant / revoke - 库
create database / show databases / drop database / use - 表
select / insert / update / delete - 索引
create index / alter index / drop index
MySQL体系结构
连接数:max_connections
执行计划:explain
存储引擎
存储引擎 | 描述 |
---|---|
InnoDB | 默认存储引擎,支持事务、外键 |
MyISAM | MySQL5.5前默认存储引擎 |
CSV | |
MEMORY | |
NDB |
InnoDB内存结构
基于磁盘存储数据
Page页
Buffer pool刷脏
Redo log
刷脏与Redo log效率差别在于随机IO和顺序IO
MySQL磁盘结构
系统表空间
独占表空间
通用表空间
临时表空间
sql语句执行过程
- 从内存或磁盘读取数据
- 执行器执行
- 写入undo log和redo log
- 调存储引擎
- 事务提交
索引
本质是一个排序的数据结构
索引类型:普通、唯一、全文(适用于文本类)
索引存储结构
二叉查找树,tree节点(键值、数据磁盘地址、左右子节点引用)
平衡二叉树
多路平衡查找树(B树)
加强版多路平衡查找树(B+树)
索引与存储引擎
InnoDB存储引擎中,tableName_innodb.idb,索引与数据文件是同一个
MyISAM存储引擎中,tableName_myisam.MYI 是索引文件,tableName_myisam.MYD 是数据文件
索引创建与使用规则
- 列的离散度
- 联合索引最多匹配原则
主键索引存储:索引和数据
辅助索引存储:索引和主键值
事务
- 脏读
insert、update - 不可重复读
update、delete - 幻读
insert
MVCC
通过数据请求时点的一致性数据快照,用快照来提供一定级别的一致性读取
锁
- 行锁
共享锁(读锁、S锁):LOCK IN SHARE MODE
排他锁(写锁、X锁):(手动锁)FOR UPDATE / update、insert、delete(自动锁)
InnoDB锁的是索引记录 - 表锁
MySQL优化
- SQL与索引
慢查询SQL、执行计划、索引 - 存储引擎与表结构
InnoDB、MyISAM,拆分表 - 数据库架构
Redis、MySQL集群 - MySQL配置
连接数、超时等待时间 - 硬件与操作系统
升级硬件