1

我正在使用JOINMySQL 来选择一篇文章以及与之相关的所有评论,但我意识到当我选择一篇文章并且有多个评论时,我会得到同一篇文章的评论数量重复。例如:
我有一个包含以下列的表格articles
1. id
2.以及带有以下列article
的表格: 1. 2. 3。comments
c_id
body
a_id

我尝试使用的 MySQL 查询:

SELECT  * FROM `articles`
JOIN`comments`
ON (`articles`.id = `comments`.a_id)
WHERE `articles`.id = 134  

这是最终的结果:

id  article   c_id  body        a_id
134 Article1    2   Comment1    134
134 Article1    3   Comment2    134
134 Article1    8   Comment3    134  

所以我的问题是:由于我article为每条评论获得相同列的值,这是否会减慢 MySQL 查询或我的 Web 应用程序的速度?因为我请求的数据比我真正需要的更多。
我可以将查询分成 2 个简单的SELECT查询,但这有点矫枉过正,对吧?

谢谢阅读。

编辑:
如果我article列的值更大,包含 1k+ 个字符,它会复制它吗?

4

5 回答 5

3

由于我为每条评论获得相同的文章列的值,这是否会减慢 MySQL 查询或我的 Web 应用程序的速度?因为我请求的数据比我真正需要的更多。

由于数据库传输的字节数超过了它需要的字节数,因此会产生与此相关的性能成本,但它可能并不明显。

我可以将查询分成 2 个简单的 SELECT 查询,但这有点过分,对吧?

没有测量很难说。如果 article 的值是一个 Gigabyte 而不是几个字符,那么您可能想要进行两次选择而不是一次选择。

于 2012-07-12T17:17:56.313 回答
2

您可以在一个查询中获取要显示的所有文章,然后对所有评论执行另一个 mysql 调用WHERE comments.a_id IN (1,2,5,6,9,10),然后在您的应用程序中为您正在显示的文章提取相关评论。

我认为这将比在每篇文章的单独查询中获取评论更有效。

于 2012-07-12T17:18:14.410 回答
1

还行吧。拆分为两个查询将需要两次访问数据库,两次执行类似的查询等。在大多数设置中,这比获取更多数据更昂贵 - 希望客户端用于与数据库通信的协议会优化这一点。MySQL 确实可以选择在客户端和服务器之间使用压缩- 这应该优化传输的数据。

如果这对您的应用程序至关重要,您应该进行基准测试并选择最适合您的应用程序。

如果不采用易于实现的方法 - 对整个应用程序进行性能/负载测试,找到瓶颈并修复它们。

于 2012-07-12T17:18:44.813 回答
1

通常最好选择比您需要的更多信息,而不是在另一个查询中返回以从数据库中获取更多信息。

article在这种情况下,我无法想象你也通过抓取记录来拖慢你的系统。如果您担心它,请不要使用它,select *而是像这样显式调用列:

SELECT `comments`.c_id , `comments`.body, `comments`.a_id
FROM `articles`
    JOIN `comments` ON `articles`.id = `comments`.a_id
WHERE `articles`.id = 134 
于 2012-07-12T17:19:10.757 回答
1

如果分别执行两个查询,肯定会更慢。如果在执行查询之前有“article.id”,则不需要使用 JOIN。

于 2012-07-12T17:20:05.070 回答