我需要知道是否有一种优化这种数据库模型的最佳方法:
这是我的表格:
[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评论......有没有办法优化这个(除了使用索引)?你会使用存储过程,一个带临时表的查询,在某处添加“预先计算”的字段......?
非常感谢! :)
答案 0 :(得分:0)
在连接数据库之前,我会计算你的<today - time range>
部分客户端。
除此之外,它还取决于你拥有的索引,服务器的负载(缓存在内存中的内容)以及每个表中的数据量(每个典型帖子的评论数量,每个帖子的数量)类别等)。换句话说,您需要个人资料。假设所有这些都没有实际意义(它不是!),一个不错的查询优化器应该能够处理其他任何事情。
出于习惯,我会做一些不同的事情,但在这种情况下,如果不了解您的系统,它们就不重要了。主要的是,我会考虑音量。
通常,我喜欢表达我的查询,如果连接按顺序完成,结果集尽可能地保持尽可能小。在这种情况下,这可能意味着将postCategory
联接列在comments
联接之上,并将“= <MyCategoryID>
”条件移至联接表达式的一部分。