获得徽章 10
- #青训营笔记创作活动#
2月6日 打卡day13
今日学习了Redis相关的内容,主要以常见的Redis问答的形式来学习,文章从Redis的介绍,到Redis的简单基本原理进行了介绍,整体内容涵盖大部分常见知识点,受益匪浅。评论点赞 - #青训营笔记创作活动#
2月4日 打卡day12
今日学习了MySQL索引的使用指南,从各种索引存在的问题,到索引失效的场景,最后还学习了索引覆盖,索引下推,以及MRR和索引跳跃式扫描。
下面总结了所学到的索引失效的情况:
1.查询中带有or
2.模糊查询like以%开头
3.字符类型查询不带引号
4.索引字段参与计算
5.字段被用于函数计算
6.违背最左原则
7.不同字段值比对
8.反向范围操作
索引覆盖指的是要查询的列包含在索引字段内,并且where中字段也包含在索引字段内。其可以减少一次回表。
索引下推指的是当where条件中有部分满足最左匹配原则,但全部加起来是不满足(剩下部分包含在索引字段中)的情况下,本来是要将之前满足部分的结果给server层一条一条回表查,而索引下推就是直接下推到server下一层引擎层使用索引来查然后再交给server查,这样就可以减少回表的次数。
MRR机制指的是范围查询时,由于可能存在不停的在两个磁盘page之间来回切换,因此先进行全部索引检索(或缓存满了),将需要的page存到缓存,然后再排序按顺序IO,这样可以减少IO次数
索引跳跃式扫描指的是虽然不符合最左前缀原则,但是可以跳过第一个字段来索引查,其本质是优化器重构了SQL,其先将第一个字段去重,然后加到and语句中,这样就满足最左前缀,就可以通过索引加速了,不过索引跳跃式扫描有许多限制。展开评论点赞 - #青训营笔记创作活动#
2月3日 打卡day11
今日学习了数据库索引相关的知识,从索引的分类,索引的本质,索引的创建,使用,查询,删除进行了学习。索引本质是为了加速查询操作的,其为在磁盘中创建的数据结构。
按照数据结构层次,可以将索引分为B+Tree,Hash,R-Tree,T-Tree四种类型。按照字段数量层次,可以分为单列索引和多列索引,而单列索引也分很多种,有唯一索引,主键索引,普通索引等,只要是基于单个字段创建的就是单列索引。按照功能逻辑层次,可以分为普通索引,唯一索引,主键索引,全文索引,空间索引。按照存储方式层次,可以分为聚簇索引和非聚簇索引,两者的区别就像是数组和链表的区别,逻辑和物理上的连续性。展开评论点赞 - #青训营笔记创作活动#
2月2日 打卡day10
今日学习了一条SQL语句在MySQL数据库中执行的过程。
对于一条查询SQL来说,其首先将SQL语句传入SQL接口,然后根据这一条语句的哈希值在查询缓存中查找是否有数据,若有则直接返回数据,否则会将SQL语句交给解析器进行词法语法分析得到语法树,然后判断正确性,若正确则交给优化器,优化器将据此生成多个执行计划,并选出最优的执行计划,然后根据执行计划调用存储引擎的API,存储引擎则根据调用执行相应的操作,从磁盘检索数据,而磁盘文件与引擎进行IO交互,向上层提供数据支持,并将数据逐条取出返回。
对于一条写入SQL来说,其首先同样将SQL语句传入SQL接口,然后根据哈希值在查询缓存中查询,若存在此次操作的表,则将删除所有缓存然后进行下一步,若缓存中不存在,则将SQL语句交给解析器生成语法树,然后交给优化器生成最优执行计划,此时优化器下一步是写undo和redo(prepare)日志,然后在缓冲区中查找是否存在操作的表或行,如果存在,则会将数据写入缓冲中,而缓冲中的数据会在后台利用Checkpoint机制刷写回磁盘,同时在写入数据到缓冲时,还会记录bin日志,若之前的缓冲区不存在所要操作的数据,则将调用存储引擎的API往磁盘中写入数据,并记录bin日志,日志写完之后便redo日志改为commit状态,同时返回写入成功。
日志:查询操作一般不写,慢查询若超时会写日志。而写入操作的undo日志记录的是与SQL相反的SQL语句,如insert也会记录delete,redo日志(Innodb特有)记录的是此次事务的过程,而bin日志是MySQL自带的一种日志,与redo日志差不多。
返回过程中,对于读类型的返回,是逐条返回到SQL接口,SQL接口对数据进行处理,如选择特定字段返回,没查到数据也要返回到SQL接口,接口会向客户端返回null,同时还会将查询结果返回放入到缓存中。而对于写类型的返回,其只需要返回执行状态、影响的行数以及执行耗时,同样通过SQL接口返回。
最后结果通过客户端连接的数据库端口返回,也就是TCP三次握手四次挥手的过程。连接断开后MySQL创建的线程并不会被立即销毁,而是会被放入连接池,等待复用。超过八小时未被复用才会被销毁。展开评论点赞 - #青训营笔记创作活动#
2月1日 打卡day9
502问题排查
1. 由于服务器超时,nginx反向代理收到服务器的四次挥手(有些框架是RST),nginx返回502给客户端
2. 由于服务器崩溃,nginx反向代理收到服务器的RST数据包,nginx返回502给客户端
3. 服务注册时,新的服务还没有注册上,但老服务已经被销毁了,此时仍然会请求老服务的IP,由于端口不开放了,所以返回RST给nginx,然后nginx返回502给客户端展开评论点赞 - #青训营笔记创作活动#
1月26日 打卡day8
今日学习了计算机网络相关的原理,了解到网络本质是为了实现通信的需求,将计算机网络进行分层设计,从物理层的集线器,到链路层层的交换机,再到网络层的路由器,将一个个网络连接了起来,从而构成一个全球互联网,感叹计算机网络的设计之精湛!展开评论点赞 - #青训营笔记创作活动#
1月20日 打卡day7
今日学习了MySQL整体的架构,整体上看,整个架构分为网络连接层、系统服务层、存储引擎层以及文件系统层。
其中对于连接层,其负责处理客户端的连接工作(基于TCP/IP,所以是半双工,另外采用数据库连接池来管理和复用连接)
对于服务层,其包含SQL接口(负责接收客户端的SQL语句)、解析器(分析SQL语句)、优化器(对语句优化,并生成执行计划,然后调用存储引擎的API执行)以及存储缓冲(提高存或取效率,对于查询缓存命中率不高,且开销不划算,于是高版本就移除了查询缓存,对于写入缓存,修改缓存后利用checkpoint机制刷写到磁盘)四块区域。
而存储引擎层指的是其支持的存储引擎,如InnoDB、MyISAM等,MySQL可以在不同情况下使用不同的存储引擎,其负责对数据进行管理,也会对库、表和索引等进行管理。
最后文件系统层涵盖所有的日志,以及数据、索引文件,其位于系统硬盘上,负责持久化。展开评论点赞
,将多项目放入一个仓库便于管理![[呲牙]](http://lf-web-assets.juejin.cn/obj/juejin-web/xitu_juejin_web/img/jj_emoji_2.cd1e2bd.png)