我有一个简单的表,需要半复杂的信息检索。该表为:
表格 - 帖子
id - bigint(20)
title - varchar(250)
content - longtext
parent_id - int(20)
type - varchar(50)
目前,我在帖子表中输入了三个不同的类型值 - 群组、讨论和回复。数据的存储方式如下:
- 回复的parent_id 是讨论 ID。
- 讨论的parent_id 为群组 ID(或 0)。
该网站的成员可以加入一个群组,我想将该群组的讨论和回复包含在他们的电子邮件摘要中。目前,我正在使用 LEFT JOINS 来完成此任务,但它变得很重,因为我必须有很多连接才能完成它,并且随着表的快速增长,性能会下降。
有人对更好的实现有任何建议吗?我已经研究了嵌套集模型,但我认为它不会对我有帮助,因为检索是基于顶级组条目上的操作,因此检索到的数据需要与其绑定(bind)。
非常感谢您的想法和回应。
最佳答案
如果您的数据模型是分组讨论中的回复,那么您应该为这些实体拥有三个不同的表。这为 SQL 引擎提供了更多信息来优化查询。
现在可能已经太晚了。在这种情况下,您需要确保拥有适当的索引。例如,要获取群组中的所有讨论,可以使用如下查询:
select *
from posts p
where p.parent_id = XXX and p.type = 'Discussion'
这表明您需要一个关于 type
的索引,可能是 posts(type, id)。要了解哪些其他索引可能有用,您需要修改您的问题以包含您正在使用的一些查询。
关于mysql - 实现基于父ID关系的查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14629533/