MySQL基础
事务
使用方式
1 | start transaction # 开启事物 |
四大特性
- 原子性:事务是一个整体,只能一起成功或者一起失败
- 一致性:事务完成时,必须使所有的数据都保持一致状态
- 隔离性:保证事务不受外界操作影响
- 持久性:事物一旦提交或者回滚,对数据改变是永久的
并发问题
- 脏读:事务中读到其他事务中还未提交的数据
- 不可重复读:事务中俩次查询时数据被改变则查询结果不相同
- 幻读:解决不可重复读后,在事物查询完无数据时其他事物增加该数据则会造成查不到该数据但是插入时显示数据存在
隔离级别
查看隔离级别
1 | select @@transaction_isolation; |
修改隔离级别
1 | set {session|global} transaction isolation level read uncommitted |
隔离级别及解决问题
隔离级别 | 脏读 | 不可重复读 | 幻读 |
---|---|---|---|
Read uncommitted | ✔ | ✔ | ✔ |
Read committed(Oracle默认) | x | ✔ | ✔ |
Repeatable Read(MySQL默认) | x | x | ✔ |
Serializable | x | x | x |
存储引擎
简介
存储引擎就是村粗数据、建立索引、更新/查询等技术的实现方式。存储引擎是基于表的,而不是基于库的,所以存储引擎也可被称为表类型。
指定存储引擎
1 | create table mytable( |
InnoDB
InnoDB是一种高可靠和高性能的通用存储引擎,在MySQL5.5之后成为MySQL默认引擎。
特点:
1. 支持事物
1. 支持行级锁
1. 支持外键
索引
简介
索引本质是将建立索引的字段通过使用相适应的数据结构(如二叉树)存储以提高查询孙读。
优点:
1. 提高数据检索效率,降低IO成本。
1. 通过索引列对数据进行排序能降低排序的成本。
缺点:
- 索引列占用空间。
- 提高查询效率的同时降低了更新表的速度。
索引 | 说明 | 特点 |
---|---|---|
主键索引 | 根据主键建立的索引 | 默认自动创建,只能有一个 |
唯一索引 | 避免某列有重复数据 | 多个 |
常规索引 | 快速定位 | 多个 |
全文索引 | 查找文本中的关键字 | 多个 |
聚集索引:只能存在一个,一般是主键或者第一个唯一索引,索引存放有完整的一整条数据。
二级索引:可以有多个,索引一般关联主键,通过二级索引确定查找数据的主键再通过聚集索引查找完整数据。
索引语法
1 | # 创建 |
SQL性能分析
查看NSERT、UPDATE、DELETE、SELECT访问频率
1 | # (7个下划线) |
慢查询日志
在my.cnf中开启慢查询日志
1 | # 开启MySQL慢日志查询开关 |
通过profile查看耗时详情
1 | # 查看当前数据库是否支持profile操作 |
explain执行计划
1 | explain select * from user; |
字段 | 含义 |
---|---|
id | 查询顺序,数字越大越先查询 |
select_type | 表示查询类型 |
type | 表示连接类型[NULL|system|const|eq_ref|ref|range|index|all]性能由好到差 |
possible_key | 在这张表中可能用到的索引 |
key | 实际用到的索引 |
key_len | 使用的索引字段最大长度 |
row | 必须查询行数,是一个估计值 |
filtered | 表示行数占需要读取行数的百分比,越大越好 |
索引使用
索引最左前缀法则:查询从索引最左侧开始。如果跳过索引中的某一列索引将部分失效,如果不包含最左列则索引失效。
范围查询:范围查询中>右侧的字段索引失效,>=则不会
SQL优化
视图/存储过程/触发器
锁
InnoDB引擎
MySQL管理
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 way的个人博客!