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

时间:2011-04-06 20:46:24

标签: php mysql performance

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

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

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

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

2 个答案:

答案 0 :(得分:5)

你没有提到正确性是你有兴趣维护的东西。 我建议您概率地从数据库中删除对象。这将大大减少空间并可能提高性能。

答案 1 :(得分:2)

乍一看,这篇文章看起来像是一个过早优化的严重案例(有些人说这是所有邪恶的根源)。另外,说你的数据存储类似CMS而不是CMS似乎相当......混淆。将您的内容存储在数据库中并不会使您像CMS一样,它是处理您的内容的工作流程(您输入它的方式,以及最终演示文稿的显示方式),它构成了CMS,而不是基础机制。

话虽这么说,听起来你正在尝试优化表中的数据类型,这很好。对于这类事情,没有比the documentation更好的了解MySQL的细节。在浏览了您可以使用的内容之后,就如何组织不同的架构做出明智的决策会更容易。

即便如此,也不要过于强烈地约束自己。为自己提供充足的呼吸和成长空间,如果您发现应用程序的增长方式与原始设计路径大不相同,那么您可以轻松地重新审视该问题。这种类型的优化几乎不会影响磁盘空间,即使每个表有数百万行,也有几十个表,只要你甚至可以接近实际用例。

为了提高查询效率,我能提供的最好效果是有效地使用JOINs来约束每个查询所关联的数据量。