当前位置: 首页 > news >正文

慢查询解决思路

1. 复现问题

慢查询的出现是常态还是偶尔?是否在业务允许范围内?

"不要过早优化,先 Make it work / right,再 Make it fast。"

建议先将查询语句及其触发条件记录下来,便于后续测试、分析和对比。

2. 定位问题

2.1 单机数据库: explain查询执行计划

数据库默认优化后的执行计划是否使用了合适的索引、是否走了全表扫描、排序是否使用了临时表等。然后我们可以进行一些手动优化。

2.2 分布式场景: 尾部延迟放大

任务分片后,部分节点可能由于数据倾斜、垃圾收集、网络丢包等各种原因导致“尾部慢任务”,拖累整体响应时间。这也要结合业务场景进行适当优化。DDIA中第三章有详细介绍。

3. 索引

索引未命中是常见的慢查询原因,当然前提是得有个索引。如果数据库还没有索引,就赶紧建立一个来加速读取吧。

3.1 加索引

索引背后的大致思想是:通过保存一下额外的“路标”,从而帮助你加速找到想要的数据。

索引是额外衍生的数据,它不会干扰数据系统本身的内容,只会影响查询的性能。

然鹅,索引不是越多越好。维护这些索引数据会产生额外的开销,尤其是在写入的时候。如果维护了多份索引,原本仅需一次对主数据的写入,就需要额外再附加多个对于索引的维护操作,造成了写放大,可能会大大影响性能。

另外,我们有各种数据结构可用来保存索引数据,如哈希表、B树族、跳表、红黑树等。尽管做业务的时候大概不需要我们去实现某种索引或是存储引擎,但是了解我们的业务场景与不同数据结构的优劣,并选取其中最合适的那个是相当重要的

3.2 索引未命中场景与解决方案

  • LIKE '%xxx' 模糊匹配 → 使用 

相关文章:

  • 【Unity3D中UI与物体可见性的判断方法】
  • CSS基础知识学习指南
  • C语言--求n以内的素数(质数)
  • 蓝桥杯真题-危险系数DF
  • L2-051 满树的遍历
  • Java的基本语法(1)
  • 彻底改变我 React 开发方式的组件模式
  • 三格电子上新款——欧姆龙 CJ/CP系列 PLC 串口转网口
  • for循环的优化方式、循环的种类、使用及平替方案。
  • LEARNING DYNAMICS OF LLM FINETUNING【论文阅读笔记】
  • 如何深入理解protobuf
  • 小型实验室数控机床-迷你型数控加工中心|CNC数控车床
  • 软考 中级软件设计师 考点知识点笔记总结 day11 文件管理 设备管理
  • 51电子表
  • AI 之 LLM(大语言模型)是如何生成文本的!
  • 力扣经典算法篇-11-除自身以外数组的乘积(总乘积求除法,左右乘积法)
  • 探索 C++ 中的 const 关键字
  • 美食推荐小程序
  • OpenFeign 的实现原理详解
  • 探索在视频深度伪造中的细微的表情变化或对特定面部特征的小改动检测方法
  • 广东东莞自己建站教程/seo建站教学
  • 肥城网站建设推广/facebook海外推广
  • 专家一对一免费咨询/seo搜索引擎优化书籍
  • 做游戏交易网站有哪些内容/职业教育培训机构排名前十
  • 网站开发案例详解下载/中国新闻社
  • 哪个网站做农产品/制作自己的网页