0

我需要知道是否有优化这种数据库模型的最佳方法:

这是我的桌子:

[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 评论......有没有办法优化这个(除了使用索引)?您会使用存储过程、带有临时表的查询、在某处添加“预先计算”的字段...?

非常感谢!:)

4

1 回答 1

0

<today - time range>在连接到数据库之前,我会计算您的客户端部分。

除此之外,这将取决于您拥有的索引、服务器的负载(它在内存中缓存的内容)以及每个表中的数据量(每个典型帖子有多少评论,每个类别有多少帖子等) )。换句话说,您需要. 假设所有这些都没有实际意义(事实并非如此!),一个体面的查询优化器应该能够处理其他任何事情。

出于习惯,我会做一些不同的事情,但在这种情况下,如果不更多地了解您的系统,它们应该无关紧要。主要的一点是我会考虑音量。

一般来说,我喜欢这样表达我的查询,如果连接是按顺序完成的,那么结果集会尽可能地保持尽可能小。在这种情况下,这可能意味着在postCategory连接上方列出comments连接,并将“ = <MyCategoryID>”条件向上移动以成为连接表达式的一部分。

于 2009-06-11T02:49:34.440 回答