MySQL概述


Mysql概述

img

不同引擎对比

InnodDB

? 支持行锁

? 支持外键

? 支持在线热备份

? 支持事物

? 5.6之前不支持全文搜索

MyISAM

? 支持全文索引:使用 match against来查找

? 支持空间数据索引

memory

? 支持哈希索引

索引

前缀索引

? 例如对于一些字段值很大的,如TEXT,BLOB就可以使用前缀索引了

最左前缀原则

聚族索引:其实就是主键索引

二级索引:其实就是非主键索引

事物

四大特性

? 原子性

? 隔离性:隔离会导致出现脏读、幻读等问题

? 读未提交

? 读提交

? 可重复读

? 串行化

? 一致性

? 持久性

幻读

? 会出现数据不一致的情况

? 幻读是指一个事务前后两次当前读查询,后一次查询到了前一次没有的行,并且这一行是新插入的行

? 行锁只能锁已经有的行,却不能锁新插入的行,所以需要间隙锁的解决幻读问题

常用配置命令

explain

slow log:慢日记

? set long_query_time = 数值

? 子主题 2

analyze table t:重新统计索引信息

show index from table:重看索引基数

show processlist:查看线程的情况

全局锁

? 一般用于备份

? flush tables with read lock(FTWRL),只读状态

表级锁

? 表锁: lock tables ... read/write

? 元数据锁(MDL)

行级锁

? 两阶段协议

? 解决死锁的方法

? 超时释放

? 检测-回滚

日记系统

redo log

? InnodDB 特有的

? 记录的是这个数据页做了什么修改

? 更新操作时,先把记录写到redolog上,再更新内存。系统再空闲的时候把redoLog持久化到磁盘

? 循环写

binlog

? server层,所有引擎都共用

? 记录的是一个完整的更新命令

? binlog可以追加

两阶段提交

为什么需要两个日记系统

性能相关

一些核心语句

常规面试题

一条sql语句是如何执行的

? 连接器->查询缓存->分析器(语法-词法分析)->优化器->执行器