加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

Mysql必读mysql分解关联查询的优点

发布时间:2020-12-12 00:49:09 所属栏目:MySql教程 来源:网络整理
导读:《Mysql必读mysql分解关联查询的优点》要点: 本文介绍了Mysql必读mysql分解关联查询的优点,希望对您有用。如果有疑问,可以联系我们。 导读:很多高性能的应用都会对关联查询进行分解.简单的说,可以对每一个表进行一次单表查询,然后将结果在应用程序中进行

《Mysql必读mysql分解关联查询的优点》要点:
本文介绍了Mysql必读mysql分解关联查询的优点,希望对您有用。如果有疑问,可以联系我们。

导读:很多高性能的应用都会对关联查询进行分解.简单的说,可以对每一个表进行一次单表查询,然后将结果在应用程序中进行关联. 很多高性能的应用都会对关联查询进行分解.简单的说,然后将结果在应用程序中进行关联.

例如下面这个查询

  1. select?*?from?tag??
  2. ??????join?tag_post?on?tag_post.tag_id=tag.id?
  3. ??????join?post?on?tag_post.post_id=post.id?
  4. ??????where?tag.tag='mysql'?
可以分解成下面这些查询来代替

  1. select?*?from?tag?where?tag='mysql';?
  2. ?
  3. select?*?from?tag_post?where?tag_id?=?1234;?
  4. ?
  5. select?*?from?post?where?post.id?in?(123,456,789,369);?

到底为什么要这样做?乍一看,这样做并没有什么好处,原本一条查询,这里变成多条查询,返回的结果又是一模一样的.事实上,用分解关联查询的方式重构查询有如下优势:
(1)让缓存的效率更高.许多应用程序可以方便的缓存单表查询对应的结果对象.例如,上面查询中的tag已经被缓存了,那么应用就可以跳过第一个查询.再例如,应用中已经缓存了ID为123、789的内容,那么第三个查询的in()
中就可以少几个ID.另外,对mysql的缓存来说,如果关联中的摸个表发生了变化,那么久无法使用查询缓存了,而拆分后,如果摸个表很少改变,那么基于该表的查询就可以重复利用查询缓存结果了

(2)将查询分解后,执行单个查询可以减少锁的竞争.
(3)在应用层做关联,可以更容易对数据库进行拆分,更容易做到高性能和可扩展.
(4)查询本身效率也可能会有所提升.这个例子中,使用in()代替关联查询,可以让msyql按照ID顺序进行查询,这可能比随机的关联要更高效.
(5)可以减少冗余记录的查询.在应用层做关联查询,意味着对应某条记录应用只需要查询一次,而在数据库中做关联查询,则可能需要重复的访问一部分数据.从这点看,这样的重构还可能会减少网络和内存的消耗.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读