mysql

有时候我们需要根据查询语句里面的in的顺序来获得返回的数据,比如:
select * from book where id in (5, 1);
执行这条语句,mysql会将查询结果按照id排序,返回的第一条数据的id是1,第二条是5,如果我们想要mysql按照我们in里面的顺序来返回,可以这样:
select * from book where id in (5, 1) order by field(id, 5, 1);

undolog和redolog的区别

redolog日志记录的是数据页的物理变化,服务宕机可用来同步数据,而undolog不同,它主要记录的是逻辑日志,当事务回滚时,通过逆操作恢复原来的数据,比如我么删除一条数据的时候,就会在undolog日志文件中新增一条insert语句,如果发生回滚就执行逆操作。
redolog保证了事务的持久性,undolog保证了事务的原子性和一致性

事务的隔离性

事务的隔离性是由锁和MVCC实现的
其中mvcc的意思是多版本并发控制。指维护一个数据的多个版本,使得读写操作没有冲突,它的底层实现主要是分为了三个部分,第一个是隐藏字段,第二个是undo log日志,第三个是readView读视图隐藏字段是指:在mysgl中给每 个表都设置了隐藏字段,有一个是trx id(事务id),记录每一次操作的事务id,是自增的;另一个字段 是roll pointer(回滚指针),指向上-个版 本的事务版本记录地址undo log主要的作用是记录回滚日志,存储老版本数据,在内部会形成-一个版本链,在多个事务并行操作某一行记录,记录不同事务修改数据的版本,通过roll_pointer指针形成一个链表readView解决的是一个事务查询选择版本的问题,在内部定义了一些匹配规则和当前的一些事务id判断该访问那个版本的数据,不同的隔离级别快照读是不一样的,最终的访问的结果不一样。如果是rc隔离级别,每一次执行快照读时生成ReadView,如果是rr隔离级别仅在事务中第一次执行快照读时生成ReadView,后续复用

慢查询

在配置文件中添加参数:
slow_query_log=1 # 开启MySQL慢日志查询开关 0为不开启
long_query_time=2 # 设置慢日志的时间为2秒,SQL语句执行时间超过2秒,就会视为慢查询,记入慢查询日志
慢查询可能出现的场景:
1.聚合查询(尝试新增临时表解决)
2.多表查询(尝试优化SQL语句结构)
3.表数据量过大查询(尝试添加索引)
4.深度分页查询
explain语句:
在这里插入图片描述
type:这条SQL的连接的类型,性能由好到差为null,system,const,eq_ref,ref,range,index,all (null:表示这条查询没有用到表,system:表示查询系统中的表,const:表示根据主键查询,eq_ref:主键索引查询或唯一索引查询,ref:索引查询,跟eq_ref的区别是:eq_ref只能查询出一条数据,ref根据索引查,可能得到多条数据,range:索引,但是范围查询,index:全索引查询,索引数扫描,all:没走索引,全盘扫描)
possible_key:当前sql可能会使用到的索引
key:当前SQL实际命中的索引
key_len:索引占用的大小
extra:额外的优化建议
通过key和key_len查看是否可能命中索引
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值