代码之家  ›  专栏  ›  技术社区  ›  Tom

使用单个联合查询而不是多个查询来提高性能?

  •  0
  • Tom  · 技术社区  · 15 年前

    假设我有一个数据库,其中包含带有标记的博客文章,并且我想检索带有标记的博客文章。

    我可以做两个查询:

    SELECT title, text, date 
      FROM POSTS 
     WHERE id = 1
    

    SELECT tag 
      FROM TAGS 
     WHERE post_id = 1
    

    但是,我也可以在单个查询中执行此操作:

    SELECT title, text, date, tag 
      FROM POSTS, TAGS 
     WHERE posts.id = 1 
      AND tags.post_id = posts.id
    

    后者有点浪费,因为它传输相同的标题、文本和日期列的次数是博客文章的标记数的倍,但可能更快,因为只有一次服务器访问。

    对于后一个查询,是否有避免传输重复数据的替代方法?或者这不是什么大问题,我无论如何都应该使用它,因为传输几百个未使用的额外字节比进行两个单独的查询便宜?

    2 回复  |  直到 15 年前
        1
  •  2
  •   Donnie    15 年前

    MySQL优化并不像这样简单。您会发现,有时多个查询(可能中间有一个临时表)比单个查询快得多,尤其是在进行复杂的联接/聚合时。所以,不要假设单个查询总是更快,因为它不会。

    然而 ,单个查询是 经常 与多个查询一样快或更快,它更简洁地表达了您正在做的事情。不要担心在整个线路上有几个字节,它们与正在发生的其他事情相比是微不足道的。

        2
  •  2
  •   Adriaan Stander    15 年前

    而不是对每个日志条目进行一次访问。

    相信我,你会看到性能的提高。

    与使用从客户机到服务器的往返访问相比,检索数据的单个查询通常是更好的解决方案。