- 博客(5)
- 收藏
- 关注
原创 第一章:一条SQL查询语句是如何执行的
当Mysql拿到一个查询请求后,就会查询缓存, 缓存是以键值对(key -value )的形式储存在内存中的,key为查询的sql,value为sql执行后的数据,如果缓存有,则直接返回value;完成了上面的几步之后,来到了执行器,则开始进行sql的执行,但是执行之前还会判断一下此账号是否对这张表有执行权限;如果没有命中缓存,则来到这一步,此步的作用是分析 sql语法,譬如mysql经常报的语法错误就在这一步;如果缓存没有,则执行下面的步骤,同时把查询出来的结果放入缓存,所以每次更新数据都会更新缓存;
2024-01-18 14:14:05 352 1
原创 第四章:索引
1、主键索引: 建表的时候默认会创建主键索引,叶子节点储存行数据(聚簇索引),建议用自增id(int,bigint ,占用的字节少,节省空间);2、非主键索引:除了主键索引都是非主键索引,叶子节点记录主键id,方便回表查询数据;3、覆盖索引:如果查询条件使用的是普通索引(或是联合索引的最左原则字段),查询结果是联合索引的字段或是主键,不用回表操作,直接返回结果,减少IO磁盘读写读取正行数据;4、最左前缀:联合索引的最左 N 个字段,也可以是字符串索引的最左 M 个字符;
2024-01-18 14:12:03 796 1
原创 第三章:事务
如果是一个需要频繁使用事务的业务,使用commit work and chain语法 , 提交事务并自动启动下一个事务,这样也省去了再次执行begin语句的开销。可重复读: 是指,一个事务执行过程中看到的数据,总是跟这个事务在启动时看到的数据是一致的。所以从A的角度看, V1、V2值是1,V3的值是2;读提交 :则V1是1,V2的值是2。事务B的更新在提交后才能被A看到。读未提交: 是指,一个事务还没提交时,它做的变更就能被别的事务看到。读提交 :是指,一个事务提交之后,它做的变更才会被其他事务看到。
2024-01-18 14:08:17 329 1
原创 第二章:一条SQL更新语句是如何执行的
InnoDB的redo log是固定大小的,比如可以配置为一组4个文件,每个文件的大小是1GB,那么这个文件总共就可以记录4GB的操作。binlog是逻辑日志,记录的是这个语句的原始逻辑,比如“给ID=2这一行的c字段加1 ”。redo log是循环写的,空间固定会用完;执行器拿到引擎给的行数据,把这个值加上1,比如原来是N,现在就是N+1,得到新的一行数据,再调用引擎接口写入这行新数据。以下为update语句的执行流程图,图中浅色框表示是在InnoDB内部执行的,深色框表示是在执行器中执行的。
2024-01-16 16:52:24 337 1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人