基于父ID关系实现查询

时间:2013-01-31 15:43:03

标签: mysql sql performance

我有一个简单的表,需要半复杂的信息检索。该表是:

TABLE - 帖子

id        - bigint(20)
title     - varchar(250)
content   - longtext
parent_id - int(20)
type      - varchar(50)

目前,我有三个不同的类型值进入posts表 - 组,讨论和回复。数据以如下方式存储:

  1. 回复的讨论ID为其parent_id。
  2. 讨论的组ID(或0)为其parent_id。
  3. 该网站的成员可以加入群组,我希望在其电子邮件摘要中包含该群组的讨论和回复。目前,我正在使用LEFT JOINS来实现这一目标,但它变得很重,因为我必须有很多连接才能完成它,并且随着表的快速增长,性能会逐渐消失。

    有没有人对更好的实施有任何建议?我已经查看了嵌套集模型,但我不相信它会对我有所帮助,因为检索是基于对顶级组条目的操作,因此检索到的数据需要与它绑定。

    非常感谢思想和回应。

1 个答案:

答案 0 :(得分:1)

如果您的数据模型是回复,则讨论是分组讨论,那么您应该为这些实体提供三个不同的表。这为SQL引擎提供了更多信息,以优化查询。

可能为时已晚。在这种情况下,您需要确保您有适当的索引。例如,要获得组中的所有讨论,就会出现如下查询:

select *
from posts p
where p.parent_id = XXX and p.type = 'Discussion'

这表明您需要type上的索引,可能是帖子(类型,ID)。要查看其他索引可能有用,您需要修改您的问题以包含您正在使用的一些查询。