0

我有一个新闻栏目。文章被标记并存储在 3 个表中:

帖子:

posts_id,title,body

标签:

tags_id,name

帖子标签:

posts_id,tags_id

目前的问题是新闻部分的首页显示前10篇文章的预览。每个预览都会显示标签列表。显示标签列表意味着我必须再次查询每个帖子以获取标签列表。

因此,例如,10 个预览需要 1 个查询(从帖子中获取 10 个帖子)+10 个查询(每个帖子上的标签 1 个,posts_tags 获取标签列表)。加载页面的 11 个查询似乎最终可能成为瓶颈。

我应该放弃标记预览吗?PIVOT 会产生相同数量的查询吗?

4

2 回答 2

0

我看到您可以尝试 2 个主要解决方案:

  • 使您的代码在一个查询中完成所有操作(使用连接返回带有相关标签的每个帖子)

  • 在 Web 服务器和脚本语言之间使用缓存层,因此如果页面没有更改,它不会再次进行所有查询

于 2012-05-12T14:51:27.387 回答
0

您可以使用“加入”将其全部保存在一个查询中。但是:这类查询可能会变得非常“昂贵”,特别是如果您要进行某种分组。所以我建议尝试子选择。例如:

SELECT (
    SELECT GROUP_CONCAT(name)
    FROM   tags, posts_tags
    WHERE  posts_tags.posts_id = posts.posts_id
    AND    tags.tags_id = posts_tags.tags_id
) FROM posts LIMIT 10

使用这种子选择,您通常可以获得比进行普通连接和分组更好的结果。

缓存当然仍然是一个好主意......

于 2012-05-12T14:58:49.153 回答