1

我想打印数据库表中的项目列表,以及每个相关子项目的小列表(最多 10 个项目)。

例如,我有这两个表:

ITEMS

id: integer
name: string


SUBITEMS

id: integer
name: string
item_id: integer

因此,一个项目可以有许多子项目。

我想打印这样的东西:

Item 1
this item has: subitem 1, subitem 2, subitem 3

Item 2
this item has: subitem 4, subitem 5, subitem 6

Item 3
this item has: subitem 2, subitem 4, subitem 7

考虑到性能,我怎么能得到这个?正如我所说,每个项目可以有许多子项目,但我最多显示 10 个。

如果我使用连接进行选择,我认为当分页时,例如每页 25 个项目和 100 个用户查询时,它可能会给数据库带来太大压力。所以,我认为这不是一个好的解决方案。

我想到了一个解决方法,有些脏:向ITEMS表添加一个名为subitems_summary(文本类型)的新字段,每次将子项分配给一个项目时,我都会选择加入两个表,并存储结果在那里,所以我可以稍后格式化该字段中的数据。例如,在上面的清单中,项目 3 的 subitems_summary 字段将是:“subitem 2; subitem 4; subitem 7”。

你怎么看?

4

2 回答 2

0

除非您的项目表确实很大,否则连接将足够快地完成此操作。这是最干净的解决方案,因此您应该首先实施。然后你可以测量性能,看看它是否真的太慢了​​。我想你会发现它会足够快。如果没有,您还可以尝试为在您所做的查询中经常使用的列添加索引。这将为 DBMS 提供更强大的优化选项,使其可以选择进行。

您的 DBMS 通常非常擅长优化此类查询,因此在进行自定义优化之前,您应该先了解查询的速度有多快。

于 2012-07-02T17:46:41.690 回答
0

由于我没有得到更多答案,我将发表我的意见。

正如 Oleksi 所说,DBMS 足以运行联合查询。这可能适用于访问者数量少的情况。但是要注意缩放,这不是做复杂事情的优化方式。

我认为有一些我很想阅读的有趣技术,但我更倾向于从一开始就优化查询,至少是一点点。在我看来,故意使用连接不是一个好主意。出于这个原因,在专业网站中最好复制字段。

无论如何,为了实现我的要求,我会这样做:https ://stackoverflow.com/a/11301759/267705

于 2012-07-12T22:27:20.463 回答