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

时间:2010-11-29 17:04:08

标签: sql mysql performance

假设我有一个数据库,其中包含有标签的博文,我想要检索带有标签的博文。

我可以做两个查询:

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 个答案:

答案 0 :(得分:2)

而不是一次到服务器,而不是每个帖子条目的旅行。

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

我使用单一查询来检索数据往往是比使用从客户端到服务器的往返更好的解决方案。

答案 1 :(得分:2)

MySQL优化并不像这样简单。您会发现有时多个查询(可能在中间有一个临时表)比单个查询快得多,特别是在复杂的连接/聚合的情况下。因此,不要假设单个查询总是更快,因为它不会。

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