• 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的嵌套环关联,某些场景哈希关联的效率更高很多。

  • 相关阅读:
    c#反射动态创建窗体
    ImageSwitcher 图片切换器
    viewSwitcher 切换视图
    ratingBar 星级评分条
    seekBar拖动滑块
    pythonUDP发送结构体,对齐到C++结构体
    pyqt5界面
    progressbar
    SVN服务器搭建和使用(一)
    关于MBR、GPT以及BIOS引导模式区分
  • 原文地址:https://www.cnblogs.com/sandaizi/p/9262722.html
Copyright © 2020-2023  润新知