我有一个简单的表,需要半复杂的信息检索。该表是:
id - bigint(20)
title - varchar(250)
content - longtext
parent_id - int(20)
type - varchar(50)
目前,我有三个不同的类型值进入posts表 - 组,讨论和回复。数据以如下方式存储:
该网站的成员可以加入群组,我希望在其电子邮件摘要中包含该群组的讨论和回复。目前,我正在使用LEFT JOINS来实现这一目标,但它变得很重,因为我必须有很多连接才能完成它,并且随着表的快速增长,性能会逐渐消失。
有没有人对更好的实施有任何建议?我已经查看了嵌套集模型,但我不相信它会对我有所帮助,因为检索是基于对顶级组条目的操作,因此检索到的数据需要与它绑定。
非常感谢思想和回应。
答案 0 :(得分:1)
如果您的数据模型是回复,则讨论是分组讨论,那么您应该为这些实体提供三个不同的表。这为SQL引擎提供了更多信息,以优化查询。
可能为时已晚。在这种情况下,您需要确保您有适当的索引。例如,要获得组中的所有讨论,就会出现如下查询:
select *
from posts p
where p.parent_id = XXX and p.type = 'Discussion'
这表明您需要type
上的索引,可能是帖子(类型,ID)。要查看其他索引可能有用,您需要修改您的问题以包含您正在使用的一些查询。