关于使用MySQL的讨论板的数据库设计的困境

时间:2009-09-25 18:51:27

标签: mysql database-design

在讨论区中,通常会有更多帖子,而不是主题标题(标题)。 IMO将标题视为帖子将是一种更清洁的做法,但是如果MySQL搜索每个帖子以捕捉头条新闻,它不会对性能造成严重损害吗?

为标题创建一个单独的表肯定会提高性能,但我觉得它增加了不必要的复杂性。

我应该选择哪一方面的表现 - 清洁度权衡?

4 个答案:

答案 0 :(得分:2)

我会选择更简单的解决方案(将标题视为帖子 - 只有当这两者共享大部分属性和行为时才应该这样做),至少在你确实遇到性能问题之前。

而且,如果您确实遇到了性能问题,可能需要更简单的优化解决方案,例如:

  • 在数据库中使用正确的索引 - 您现在应该这样做,实际上是^^
  • 使用缓存(缓存HTML或数据) - 例如,使用memcached,即使它只是在很短的时间内。


我可以补充道,就像唐纳德克努特所说:

  

我们应该忘记小事   效率,约占97%   时间:过早优化是   万恶之源。

如果有一天,你真的遇到了表演问题,那么也许那天会尝试那种想法......但只要你不需要它......为什么要经历这一切有点麻烦?

而且,即使这样,添加更多缓存或将第二台服务器投入游戏可能会比重新考虑那种东西更便宜 - 实际上性能优势可能会好得多!

答案 1 :(得分:2)

不要根据性能考虑因素设计表。性能很重要,但您需要在开始担心性能之前获得逻辑模型。错误的逻辑模型会导致代码无休止地扭曲,出现大量错误,开发时间长,最终导致性能降低。

...... Knuth说的话。

可以使用既正确又相关的表格设计,以获得所需的性能。你有索引,你有表分区,你有大量的工具可以微调数据库,而不会影响应用程序。

答案 2 :(得分:1)

这取决于您的头条新闻与帖子分享的内容。可能是标题足够清晰,最好让它们保持独立。此外,请考虑您可以使用标题行作为非规范化的性能改进(更新“最近的帖子”时间,用户和预览到标题,您不需要在首页查询上挖掘它)。

答案 3 :(得分:0)

您可以简单地创建一个“is_headline”列,其索引以该列开头,目标是“仅限标题”查询。

在避免2桌设计的复杂性的同时,这将是不错的表现。