在列表中获取相关数据

时间:2012-07-02 17:42:36

标签: database performance

我想从数据库表中打印一个项目列表,并与每个项目一起列出一个相关子项目的小列表(最多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(类型为text),每次将子项分配给一个项目时,我都会选择加入两个表格,并在那里存储结果,以便稍后我可以格式化该字段中的数据。例如,在上面的清单中,第3项的subitems_summary字段为:“subitem 2; subitem 4; subitem 7”。

您怎么看?

2 个答案:

答案 0 :(得分:0)

除非您的商品表真的很大,否则加入会足够快。这是最干净的解决方案,所以你应该先实现它。然后,您可以测量性能并查看它是否真的太慢。我想你会发现它足够快。如果没有,您还可以尝试向在您进行的查询中大量使用的列添加索引。这将为DBMS提供更强大的优化选项,可供选择。

您的DBMS通常非常擅长优化这些查询,因此在进入自定义优化之前,您应该看到它能够以多快的速度进行查询。

答案 1 :(得分:0)

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

正如Oleksi所说,DBMS足以运行联合查询。访问量较低时,情况可能如此。但是要注意缩放,这不是一种做复杂事情的优化方法。

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

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