Skip to content

2026-03-28 星期六

数据库

加索引:KEY "索引名字" ("字段名字")

科普知识点


为什么说 IO 非常耗时?

  • 数量级碾压式差距:CPU 指令 / 内存访问为纳秒 (ns) 级,磁盘 IO 为毫秒 (ms) 级(1ms=100 万 ns),一次磁盘 IO ≈ 数百万次 CPU 运算,网络 IO 延迟更高
  • 阻塞造成 CPU 浪费:IO 等待会阻塞线程,导致 CPU 空转,系统吞吐量暴跌
  • 等等等等(还有两条,感觉没必要记)

高频降 IO 优化手段

  • 批量操作:批量查询 / 插入,减少 IO 往返 多级缓存:Redis / 本地缓存,避免重复 IO
  • 异步非阻塞:协程 / 异步框架,规避线程阻塞 ?零拷贝技术:减少内核与用户态间的数据拷贝
  • 索引优化:降低数据库 IO 开销 连接复用:连接池,规避频繁建连 / 断连损耗
  • 请求合并:减少网络 IO 往返次数

减少 IO 一定能提升系统性能吗


绝大多数场景下,减少 IO 可显著提升系统性能。避免:(不理解,目前知道有这种情况就行了)

  • 内存占用暴涨 锁竞争急剧加剧 业务逻辑复杂度飙升
  • 单次 IO 体量过大,长尾延迟严重 缓存一致性维护成本过高

高频踩坑反例

  • 全量加载替代分批查询:一次性拉取全表 / 全量数据到内存

  • 接口强行合并:为减少前端网络请求,把多个独立接口合并成超级接口

  • 重计算替代 IO:把数据库过滤、聚合逻辑搬到本地代码执行,全量拉取数据后循环处理,CPU 开销远超节省的 IO 时间

  • 过度批量攒写:为降低写库次数强行攒数据,批量更新

  • 过度多层缓存 微服务不合理数据冗余

正确优化思路

  1. 优先砍掉无效、重复 IO
  2. 严控单次 IO 的体量,拒绝为了少一次 IO,搞超大查询 / 超大包传输
  3. 优先用异步化、合理批量的方式优化 IO,而非粗暴减少 IO 次数
  4. 缓存只针对热点数据,严控缓存粒度,拒绝大而全的全量缓存
  5. 优先优化慢 IO(如慢 SQL),而非盲目减少本就很快的 IO 次数

经验总结

  • Navicat 可以给数据表建文件夹分组!!!

  • 软件开发:开发的时候按功能分模块。设计的时候按抽象分模块。

    • xxx 功能/模块(权限模块,用户模块,头衔模块等。针对某个类别操作的集合,通常有一个核心的操作对象)

    • xxx 系统(标签系统,权限系统,配置系统,不算一个功能,但是需要单独设计,算是地基)

  • 提示词:

    • 先写框架,再补充必要内容。更方便迁移,调试。

    • 重要内容放 ”开头“ 跟 ”结尾“,权重更大,更不容易忘。

    • 【项目背景】
      
      【任务背景】
      
      【设计第一版】
      
      【设计第二版】
      
      【任务】
      
      以第二版为主,整理为一份。规范语言描述。保证输出内容能够直接提交。
  • 项目思路:开发时,先做顶层设计。不管细节。先捋清楚要做哪些方面的事情。把大事情拆成小事情一件一件做。

    • 例如:设计标签系统 —> 1. 标签场景、数据特征 2. 设计数据表结构 3. 填充标签内容 4. 整理设计文档 5. 提取 SQL 代码
  • git bash 小技巧:将自定义指令目录添加到环境变量,即可快速打开。

    • 可以在当前目录下执行自定义的快捷指令启动 git bash 并进入来到的目录。文件名就是对应的指令
bat
# 快速启动 git-bash 的指令,并且 cd 到当前的目录
@echo off
start "" "C:\Program Files\Git\git-bash.exe" --cd=%cd%

<div style="display: flex"> <img src="https://gitee.com/kualk/pic-go/raw/master/imgs/image-20260328130240847.png" style="width:50%;" /> <img src="https://gitee.com/kualk/pic-go/raw/master/imgs/image-20260328130313289.png" style="width:50%;" /> </div>

  • 向 AI 问问题的时候,可以角色扮演地问问题。让 ai 即当老师,又当学生。讨论问题。反问,深究。苏格拉底示讨论。提前写好提示词,只需要更换讨论的问题主题就行了。

记录学习,分享技术