mysql - 实现基于父ID关系的查询

标签 mysql sql performance

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

表格 - 帖子

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

目前,我在帖子表中输入了三个不同的类型值 - 群组、讨论和回复。数据的存储方式如下:

  1. 回复的parent_id 是讨论 ID。
  2. 讨论的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/

相关文章:

PHP 连接到远程 MySQL 服务器

mysql - SQL计算连胜和连败

mysql - 为每个不同的列值选择第一行

sql - 检查重复项时的最佳自连接技术

javascript - 如何将 rel ="preload"用作 ="style"或 ="script"或提高页面速度的更好方法

java - 当 x = 0 时,Java 的 Math.pow(x, 2) 性能不佳

sql - MySQL:排序依据和限制给出错误的结果

php - 将 table1 中的值放入下拉菜单中,然后放入新的 mySql 表中

php - mysql 查询避免重复结果

performance - 如何计算CPU的理论峰值性能