MySql
2021-07-12 09:42:43 0 举报
AI智能生成
登录查看完整内容
mysql
作者其他创作
大纲/内容
MySql
数据执行流程
bufferpool
lru淘汰策略
冷热区
索引数据结构
二叉树
红黑树
hash树
B-tree树
B+树
存储引擎
MYSAM
MYI文件 索引文件
MYD数据文件
表结构信息
INNODB
frm表结构信息文件
ibd 索引加数据文件
sql执行过程
索引优化
in 和 or在数据量比较大的情况会走索引
like kk%一般情况都会走索引
索引下推
无序的无法用索引,所以联合索引后面的很难用到索引
Mysql如何选择合适的索引
trace工具
set session optimizer_trace=\"enabled=on\
第一阶段:格式化sql
第二阶段:sql优化
条件处理
表依赖详情
预估表的访问成本
扫描行数
查询成本
查询可能使用的索引
分析各个索引的使用成本
索引优化原则
代码线性,索引后上
联合索引尽量覆盖条件
不要再小基数字段上简历索引
长字符串采用前缀索引(order 和group就用不上了)
、where与order by冲突时优先where
基于慢sql查询做优化
分页查询优化
根据自增且连续的主键排序的分页查询可以先用主键过滤一下
根据非主键字段排序的分页查询
Join关联查询优化
常用算法
嵌套循环连接 Nested-Loop Join(NLJ) 算法
关联字段有索引
基于块的嵌套循环连接 Block Nested-Loop Join(BNL)算法
关联字段没索引
优化
关联字段加索引,让mysql做join操作时尽量选择NLJ算法
小表驱动大表,写多表连接sql时如果明确知道哪张表是小表可以用straight_join写法固定连接驱动方式,省去 mysql优化器自己判断的时间
in和exsits优化
count查询优化
将总数维护到Redis里
增加数据库计数表
、show table status
常见sql索引优化
order by和group by
事务隔离级别
事务及其ACID属性
原子性
一致性
隔离性
持久性
并发事务处理带来的问题
脏读
不可重读
幻读
用间隙锁解决
读未提交
读已提交
可重复读
可串行化
锁
性能分
乐观锁
悲观锁
操作类型分(都是悲观锁)
读锁--共享锁
写锁--排他锁
根据粒度分
表锁
锁住整表,不会锁,并发低,一般用在整表迁移
行锁
每次操作锁住一行数据。开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度最 高。
间隙锁
Next-KeyLock
间隙锁加行锁实现
MVCC
undo日志版本链
read view机制
已提交
binlog
使用场景
主从复制
数据恢复
刷盘时机
sync_binlog参数控制
日志格式
statment
row
mixed(基于statment和row的)
redo 日志
redo log buffer
redo log file
当前读
快照读
0 条评论
回复 删除
下一页