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

时间:2009-06-11 02:42:04

标签: sql mysql query-optimization

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

这是我的表格:

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

非常感谢! :)

1 个答案:

答案 0 :(得分:0)

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

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

出于习惯,我会做一些不同的事情,但在这种情况下,如果不了解您的系统,它们就不重要了。主要的是,我会考虑音量。

通常,我喜欢表达我的查询,如果连接按顺序完成,结果集尽可能地保持尽可能小。在这种情况下,这可能意味着将postCategory联接列在comments联接之上,并将“= <MyCategoryID>”条件移至联接表达式的一部分。