10

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

 1 year ago
source link: https://jiajunhuang.com/articles/2023_02_03-mysql.md.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

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

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

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

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

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

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

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

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

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

数据库事务 把网站去掉CSS之后 处理并发的方式 常见的索引方式 Golang 实践经验 高性能MySQL笔记第一章 面试的一些技巧 HTTP/2 简介 独立运营博客一年的一些数据分享 To B(usiness) 和 To C(ustomer) 常见的软件架构套路 Cookie 中的secure和httponly属性 Google Ads使用体验 Go的custom import path 如何挖掘二级子域名?



About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK