我想知道是否有最好的方法来优化这种DB模型:
下面是我的表格:
[category]
idCategory
name
[postCategory] (a post can be in more than 1 category)
idCategory
idPost
[post]
idPost
post
[comment]
idComment
idPost
inputDate
comment我将不得不显示特定类别、特定时间范围内的所有帖子(时间来自“评论”)。时间范围固定(1天、1周、1个月、1年)。这就是我带来的东西:
SELECT DISTINCT(post.idPost), post.post
from post
INNER JOIN comment ON post.idPost = comment.idPost
INNER JOIN postCategory ON postCategory.idPost = post.idPost
WHERE postCategory.idCategory = <myCategoryId>
AND comment.inputDate >= <today - time range>假设我希望支持10k帖子和500k评论……有没有办法优化这一点(除了使用索引)?你会使用一个存储过程,一个带有临时表的查询,在某个地方添加“预先计算”的字段...?
非常感谢!:)
发布于 2009-06-11 02:49:34
在连接到数据库之前,我会先计算客户端的<today - time range>部分。
除此之外,这将取决于你有什么索引,你的服务器有什么负载(它在内存中缓存了什么),以及每个表中的数据量(每个典型的帖子有多少评论,每个类别有多少帖子,等等)。换句话说,您需要对进行配置文件。假设所有这些都是没有意义的(它不是!),一个好的查询优化器应该能够很好地处理其他任何事情。
出于习惯,我会做一些不同的事情,但在这种情况下,如果没有更多地了解您的系统,它们应该无关紧要。但最主要的一点是,我会考虑音量。
一般来说,我喜欢表达我的查询,如果连接是按顺序完成的,那么结果集将尽可能长时间地保持较小。在本例中,这可能意味着将postCategory连接列在comments连接之上,并将"= <MyCategoryID>“条件上移到连接表达式的一部分。
https://stackoverflow.com/questions/979061
复制相似问题