【MySql】为什么我的查询没有走索引?详解mysql优化器中的成本计算
1.为什么我的查询语句没有走索引? 当我们执行查询语句时使用order by column,若在column字段上创建了索引,理论上说,为了避免排序,mysql会查询column字段的非聚簇索引,然后再回表查询数据。这样可以节省排序成本,也可以避免全表扫描。 然而,实际的情况,可能比想象中复杂。 举个🌰 # student CREATE TABLE students ( id ...
1.为什么我的查询语句没有走索引? 当我们执行查询语句时使用order by column,若在column字段上创建了索引,理论上说,为了避免排序,mysql会查询column字段的非聚簇索引,然后再回表查询数据。这样可以节省排序成本,也可以避免全表扫描。 然而,实际的情况,可能比想象中复杂。 举个🌰 # student CREATE TABLE students ( id ...
在我们的日常服务监控中,可以通过一条请求链路中不同模块的耗时,分析得到链路中的性能瓶颈处于在哪个位置。 另外,在请求链路日志中添加唯一标识(TraceID),也能让我们更方便的进行日志分析。 Trace是用来跟踪调试多服务间同一链路下的请求的方式,在Kratos框架中,预置了Trace中间件,使用者通过简单方便的配置, 即可使自己的服务拥有链路追踪的能力。 1.注入trace中间件 在...
1.来源 最近公司在服务上线过程中,客户端同事误以将未经测试的代码合并到主分支上,造成新包出现了问题。 最后只能让客户端组长将误提的代码挨个revert,暂时解决了问题。 不过这样也造成了一个新问题:后续误提的代码再合并到master时,可能会有文件缺失。 问题产生的原因很简单,在我心里也引出了一个新课题:很多人对于git的使用很多仅限于pull,push,merge等操作 我们需要对G...
1.传统分页的困境 1.1.limit分页 谈到mysql的分页,我们很容易想到limit语法: # 跳过前5条,取后10条 SELECT * FROM table_name LIMIT 10 OFFSET 5; 或者简写形式: SELECT * FROM table_name LIMIT 5,10; 然而,当offset特别大时,使用limit分页,需要扫描前offset条数...
1.从TCP层看,应用交互的步骤是什么样的? 假设两台机器上分别有应用A与应用B A -> TCP缓冲(A) -> 网络 -> TCP缓冲(B) ↓ A <- TCP缓冲(A) <- 网络 <- B(处理完后返回) 2.在传统的IO事件处理模型中,被分为阻塞IO和非阻塞IO 阻塞IO...
1.GOGC 在golang中,运行时会定期采用三色标记法对堆对象进行垃圾回收(gc),无需开发人员手动进行内存控制,简化了开发流程。本章我们从GOGC的历程讲起,详细聊聊GC的工作原理和GC的一些特性。 1.1.GOGC的发展历程 go 1.0~1.4:全STW的标记-清除 这个阶段是golang对垃圾回收的简单实现,采用经典的标记-删除法。在垃圾清除过程中,...
1.Golang中的反射如何使用 golang 中的反射以reflect.ValueOf(i)和reflect.TypeOf(i)作为入口 func test4() { var s any = "zhang" t := reflect.TypeOf(s) v := reflect.ValueOf(s) fmt.Printf("t: %v\n", t) fmt.Printf("...
1.为什么选择使用github-page部署个人博客 github-page是github官方推出的由仓库构建出一个静态网站的功能。 它完全免费,你只需要编写.html文件并上传到你的仓库,github会自动帮你构建并部署到公共网络。 一个静态网站足以实现你想要的博客,它不需要后台,不需要数据库,仅需前端页面即可完成 2.如何使用github-page部署个人博客 1.首先,...