开课mysql--------索引,性能分析-------05

MVCC:多版本并发控制,多版本指的是不同的快照。分为快照读和当前读。
RC级别下,MVCC会每个都获取最新的版本快照。

MVCC读取的版本和可见性有关,可见性和事务的隔离级别有关。

RR模式默认加间隙锁和排他锁。

幻读是一个事务的两次当前读。

快照读的:https://blog.csdn.net/jack1liu/article/details/106931988

--------------------------------------------------------------

---------------------------------------------------------------------------------------------------------------------

事务:事务的流程

update t set b=10 where a=5;

第一步:根据where=5去数据库加载行数据,同时加上排他锁。

第二步:记录undo_log回滚和多版本的MVCC。将修改之前的版本写入到undo_log。

每一条记录都有一个指针执行undo_log记录的是数据。

第三步:新行更新到内存,再将修改语句记录到redo_log中,修改记录具体指的如何修改磁盘的记录页。写redo成功就是事务提交成功了。

为什么不直接写磁盘呢?

1.redo很快记录的是sql

2.redo是顺序io,写磁盘是随机io

第四步:写binlog日志。是逻辑日志。

第五步:commit

回滚指针其实就是指向undolog日志。

----------------------------------------------------------------------------------------------

什么时候需要创建索引:

B+tree:https://blog.csdn.net/hao65103940/article/details/89032538

建议建索引都是组合索引:

覆盖索引:就是不回表。

加索引的话尽量加组合索引会比较好。

---------------------------------------------------------------------------

下半部分

------------------------------------------------------------------------------------------------

这个在老的讲义上面

哪些情况需要创建索引
\1. 主键自动建立唯一索引
\2. 频繁作为查询条件的字段应该创建索引
\3. 多表关联查询中,关联字段应该创建索引
\4. 查询中排序的字段,应该创建索引
\5. 查询中统计或者分组字段,应该创建索引

哪些情况不需要创建索引?

\1. 表记录太少
\2. 经常进行增删改操作的表
\3. 频繁更新的字段
\4. where条件里使用频率不高的字段

索引的失效分析?

4.第四个的意思就是如果有age>23 and pos='manager'的话只能走age的索引走不了pos的索引。

如何解决索引的失效的问题:

使用覆盖索引。

使用or的话走全表扫描。

---

举例:

------------------------------------------------------------------------------------------------------------------------------------------------------

一致性非锁定读取:

一行sql记录了什么?

---------------------------------------------------------------------------------------------

mysql的性能分析,这一部分以后再学习的话要自己实现下:

慢查询的功能:

1.找到是哪一条sql的问题,慢查询日志:docker连接数据库docker exec -it efbfc9086715 bash

                       查看慢查询:show variables like '%slow_query%';

                                           show variables like '%long_query_time%';

                       

10:37:53以后好好看看。

我们可以看下慢查询日志:

---------------------------------------------------------------------------------------------------------------------------------------------------------

2.性能分析查看执行计划:

看下哪些是重要的:

select_type不是特别重要的。

type重要。

这个是按照性能从高到低的顺序就行排行的。

type的种类:

system:表示只有一行或者是空表。

 

注意下这个sql,我先查的是orders表。返回的是一条记录。查出userid,再user也会返回一条记录。

-------------------

未完延申到下一节课。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值