2019/04/16 数据库性能优化和事务

在这里插入图片描述
建立索引,如何监控索引使用情况用explain,进而了解当前sql语句是不是优化过的语句
在这里插入图片描述
students有三个索引
在这里插入图片描述
在这里插入图片描述
现在想给姓名和age建立复合索引在这里插入图片描述
把表上的indexname索引删除了在这里插入图片描述
就少了一个索引
在这里插入图片描述
把age也删除了
在这里插入图片描述
创建复合索引
在这里插入图片描述
索引名是一样的
seq_in_index索引中排第几个

在这里插入图片描述
这两种都没有利用索引的
在这里插入图片描述
精确匹配利用到了索引
在这里插入图片描述
有可能会利用都索引,但是实际上没有用到
在这里插入图片描述
在这里插入图片描述
age是复合索引第二个字段,没有利用索引
在这里插入图片描述
这样写就利用到了主键索引
在这里插入图片描述
name=可以利用索引
在这里插入图片描述
还有唯一键索引
现在有三个索引,主键索引,和普通索引

在这里插入图片描述
想要创建一个唯一键索引,给name上面
在这里插入图片描述
在这里插入图片描述
创建唯一键索引
在这里插入图片描述
在这里插入图片描述explain是来详细查看命令执行结果
在这里插入图片描述
id可以判断有几个select语句
在这里插入图片描述
在这里插入图片描述
subquery 子查询,primary最外面的select
在这里插入图片描述
如果要使用type功能还需要专门设置下
在老版本上就支持,较新的版本需要改下设置,默认看不见

在这里插入图片描述
这上面就有union的提示
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这样类型就是不是ALL了全表扫描
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
key就属于有多条路径,选择最终优化的路径
整数int要占4个字节,32位
在这里插入图片描述
建立只有两个字符长度的students索引
在这里插入图片描述
只取前两个字符
在这里插入图片描述
可能用的索引,但是实际没用上
在这里插入图片描述
现在用的复合索引
在这里插入图片描述
把相关索引删除了,就用到了ref
长度8个字节

在这里插入图片描述
在这里插入图片描述
取2个字符,就是2个utf8,2个4个字符=8,unique的编码占得比较多
在这里插入图片描述
在这里插入图片描述
慢查询就是要跟着系统中哪个命令达到符合慢的条件的,比如10秒,超过10秒就认为太慢了
将来就可以把所有超过10秒的语句存起来,方便你查看,来具体针对哪条命令进行优化

在这里插入图片描述
具体怎么实现并发访问,什么时候读锁,什么时候写锁,锁的力度都有可能和存储引擎密切相关,存储引擎决定了你是用哪个级别的锁
加锁的方式

在这里插入图片描述
read读锁,只读不可写,write,排他锁,你在访问,其他人就访问不了
对students加个读锁

在这里插入图片描述
读可以读,但是改不能改
在这里插入图片描述
别的终端显示就是一直卡着
在这里插入图片描述
所以加读锁就意味着不论任何人,都不能写,包括自己
在这里插入图片描述
在这里插入图片描述
一解锁就执行了
在这里插入图片描述
在这里插入图片描述
加上写锁,自己能读
在这里插入图片描述
别人也能读
在这里插入图片描述
之前的应该是缓存,换一条命令就不能查询了
在这里插入图片描述
自己读也行,但是别人读就不行
在这里插入图片描述
在这里插入图片描述
释放锁就能读了
在这里插入图片描述
加锁的目的就是给一个人访问的时候,不让其他人也去访问。
清除查询缓存,再加上写锁,看是否能查询成功
在这里插入图片描述
就查不了了,之前别人能查是因为有缓存
在这里插入图片描述
结合锁就涉及到事务并发的问题
ACID特性

在这里插入图片描述
在这里插入图片描述
undo,取消撤销,如果有2-6操作,但是在4中间断电了
这时候内存数据丢了,硬盘上的数据还是原来的数据

在这里插入图片描述
系统会把之前的操作undo撤销,回滚,磁盘数据就还是1,没有改变
在这里插入图片描述
可能还有另外一种情况,之前的事务结束了,是一个完整的事务,但是不一定事务结束了,就要把数据立即写到磁盘里
因为什么时候写是根据系统是否空闲来决定的

在这里插入图片描述
所以就可能出现另外一个问题,出现另外一个人修改数据,567,最终是要改成9 的,但是中间突然停电,
234是完整事务,说明已经做完了,所以应该把234事务重新执行一遍redo、567是个不完整事务就需要撤销undo

在这里插入图片描述
在这里插入图片描述
**,初始化数据库 initial db state
开始一个事务 start transaction
增删改,查询不算一个事务部分,只有增删改才会记录在事务日志里
commit提交 数据库状态就发生变化
rollback 回滚
**在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值