首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >一般SQL模型优化问题(MySql)

一般SQL模型优化问题(MySql)
EN

Stack Overflow用户
提问于 2009-06-11 02:42:04
回答 1查看 109关注 0票数 0

我想知道是否有最好的方法来优化这种DB模型:

下面是我的表格:

代码语言:javascript
复制
[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年)。这就是我带来的东西:

代码语言:javascript
复制
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评论……有没有办法优化这一点(除了使用索引)?你会使用一个存储过程,一个带有临时表的查询,在某个地方添加“预先计算”的字段...?

非常感谢!:)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-06-11 02:49:34

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

除此之外,这将取决于你有什么索引,你的服务器有什么负载(它在内存中缓存了什么),以及每个表中的数据量(每个典型的帖子有多少评论,每个类别有多少帖子,等等)。换句话说,您需要对进行配置文件。假设所有这些都是没有意义的(它不是!),一个好的查询优化器应该能够很好地处理其他任何事情。

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

一般来说,我喜欢表达我的查询,如果连接是按顺序完成的,那么结果集将尽可能长时间地保持较小。在本例中,这可能意味着将postCategory连接列在comments连接之上,并将"= <MyCategoryID>“条件上移到连接表达式的一部分。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/979061

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档