zoukankan      html  css  js  c++  java
  • MySQL单表多次查询和多表联合查询,哪个效率高?

    很多高性能的应用都会对关联查询进行分解。

    简单地,可以对每个表进行一次单表查询,然后将结果在应用程序中进行关联。例如,下面这个查询:

    select * from tag

    join tag_post on tag_post.tag_id=tag.id

    join post on tag_post.post_id=post.id

    where tag.tag=’mysql’;

    可以分解成下面这些查询来代替:

    Select * from tag where tag=’mysql’;

    Select * from tag_post where tag_id=1234;

    Select * from post where id in(123,456,567,9989,8909);

    到底为什么要这样做?

    咋一看,这样做并没有什么好处,原本一条查询,这里却变成了多条查询,返回结果又是一模一样。

    事实上,用分解关联查询的方式重构查询具有如下优势:

    1. 让缓存的效率更高。 

    许多应用程序可以方便地缓存单表查询对应的结果对象。另外对于MySQL的查询缓存来说,如果关联中的某个表发生了变化,那么就无法使用查询缓存了,而拆分后,如果某个表很少改变,那么基于该表的查询就可以重复利用查询缓存结果了。

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

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

    4. 查询本身效率也可能会有所提升

    5. 可以减少冗余记录的查询。

    6. 更进一步,这样做相当于在应用中实现了哈希关联,而不是使用MySQL的嵌套环关联,某些场景哈希关联的效率更高很多。

  • 相关阅读:
    把ssl模块加入到已经编译好的apache中实现HTTPS
    六,集合
    一. 计算机语言基础知识:
    三, 字符串
    四,列表的使用方法
    hash()函数的用法
    五,字典用法总结
    十,编码
    七八九,条件和循环语句
    二.Python的基础语法知识
  • 原文地址:https://www.cnblogs.com/alex-xyl/p/11512731.html
Copyright © 2011-2022 走看看