惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

J
Java Code Geeks
Martin Fowler
Martin Fowler
B
Blog RSS Feed
D
DataBreaches.Net
L
LangChain Blog
月光博客
月光博客
S
SegmentFault 最新的问题
阮一峰的网络日志
阮一峰的网络日志
V
Visual Studio Blog
美团技术团队
Jina AI
Jina AI
博客园 - 司徒正美
雷峰网
雷峰网
Last Week in AI
Last Week in AI
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
IT之家
IT之家
博客园 - 三生石上(FineUI控件)
WordPress大学
WordPress大学
小众软件
小众软件
罗磊的独立博客
博客园_首页
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
A
About on SuperTechFans
Engineering at Meta
Engineering at Meta

Jiajun的技术笔记

你好,2026! TiDB 源码阅读(六):TiDB Coprocessor 源码解析 性能优化的核心思想 TiDB 源码阅读(五):索引 TiDB 源码阅读(四):AST、逻辑计划、物理计划 CockroachDB Serverless Architecture podman 无故退出 Cursor Control-L (CTRL-L) Keyboard Shortcuts in Terminal Replace docker with podman Using xmonad with xfce4 A RC script for freebsd frpc 自己动手写一个k8s controller AI 会取代你的(编程)岗位吗? 自建DERP服务器提升Tailscale连接速度(使用Nginx转发) 自动升级Docker容器 再读《程序员修炼之道-从小工到专家》 让浏览器下载文件 再读《软件随想录》/《黑客与画家》/《软技能》 HTTP 压力测试中的 Coordinated Omission 2的补码 编程语言中的 context 是什么? flutter macOS 构建出错 Flatpak 使用小记 Golang CAS 操作是怎么实现的 PostgreSQL 当MQ来使用 Clash 结合 工作VPN 的网络设计 使用 PostgreSQL 搭建 JuiceFS PostgreSQL 配置优化和日志分析 有GitHub Copilot?那就可以搭建你的ChatGPT4服务 窗口函数的使用(以PG为例)
为什么要把复杂的联表操作拆成多个单表查询?
Jiajun Huang · 2023-02-03 · via Jiajun的技术笔记

为什么要把复杂的联表操作拆成多个单表查询?

我们在系统优化的时候,常见的一个操作,就是把复杂的联表操作,拆解成多个单表操作,然后在应用程序中进行联接。为什么要 这样做呢?相信大家都可以列出几点。不过《高性能MySQL 第四版》对此有很好的总结,值得细品。摘录如下:

  • 让缓存的效率更高。应用程序中,简单查询对应的代码也会更简单,也就更好设计缓存,应用程序可以拆开来,缓存其中的结果,以便 下次使用复用

  • 将查询分解后,执行单个查询可以减少锁的竞争

  • 在应用层做联接,可以更容易对数据库进行拆分,更容易做到高性能和可扩展

  • 查询本身的效率可能也会有所提升

  • 可以减少对冗余记录的访问,MySQL联表操作可能会访问很多数据,并且可能是重复的访问

除此之外,我个人的补充:

  • 将联表操作放到应用层,很大的一个好处是可扩展性。扩展应用层,比扩展数据库要容易的多,通常应用层都是stateless的,可以直接scale
  • simple is better,无论对于什么来说都是
  • 把操作拆成多个小任务,可以在多个事务中执行,如果一个大事务中,有加锁或者等待,就会阻塞其他事务,拆开以后概率会降低
  • 对于整体操作的控制粒度变得更加精细,很多操作都变得更加可控

相关文章