MySQL:节省空间/减少负载的最佳方法


MySQL: Best ways to save space/reduce load

我正在编写一个由MySQL支持的web应用程序,在许多情况下,每天可以创建数千行,可能更多取决于谁在使用它。它将用于存储各种对象,例如帖子和页面(CMS喜欢但不是CMS)。

主对象表将托管这些对象,以及对象的修订版,我希望在可能的情况下减少存储需求并提高性能。例如,状态字段是enum,因为枚举被存储为整数,而不是文本,因此减少了存储空间。

我想知道是否还有其他的技术我应该使用。

还有一个object_type字段。类型可以通过插件等创建。object_type应该是一个字段还是存储在另一个表中,并在主对象表中通过ID引用(一对多关系)。不复制数据的存储优势是否大于必须进行两次查找以获取数据的性能成本?

您没有提到您对维护正确性感兴趣。我建议您从数据库中删除对象。

乍一看,这篇文章看起来像是一个过早优化的严重案例(有些人说这是万恶之源)。此外,说你的数据存储类似CMS,但不是CMS似乎更……困惑。将内容存储在数据库中不会使您成为CMS,处理内容的工作流程(从输入内容到最终演示的显示方式)才是CMS,而不是底层机制。

话虽这么说,听起来您正在尝试优化表中的数据类型,这很好。对于这类事情,没有比文档更好的地方来了解mysql的细节了。在浏览了可用的内容之后,对于如何组织不同的模式做出明智的决定将会容易得多。

即便如此,也不要过于严格地约束自己。给自己足够的空间来呼吸和成长,如果你发现你的应用程序的发展方式与你最初的设计路径有很大的不同,那么你可以很容易地重新审视这个问题。这种类型的优化几乎不会影响磁盘空间,即使在每个表有数百万行,有几十个表的情况下,只要您接近实际用例。

对于查询的效率,我能提供的最好的方法是使用JOINs有效地约束每个查询关联的数据量。