我听说过很多关于非规范化的信息,它是为了提高某些应用程序的性能而设计的。但我从未尝试过做任何相关的事情。
所以,我很好奇,规范化数据库中的哪些位置会使性能变差,或者换句话说,反规范化原则是什么?
如果我需要提高性能,我该如何使用这种技术?
最佳答案
非规范化通常用于:
- 避免一定数量的查询
- 删除一些连接
非规范化的基本思想是,您将添加冗余数据或对一些数据进行分组,以便能够以更小的成本更轻松地获取这些数据;这对性能更好。
一个简单的例子?
- 考虑一个博客的“帖子”和“评论”表
- 对于每个帖子,您将在“评论”表中有几行
- 这意味着要显示具有相关评论数量的帖子列表,您必须:
- 执行一次查询以列出帖子
- 对每个帖子执行一个查询以计算它有多少评论(是的,这些可以合并为一个,一次获得所有帖子的数量)
- 这意味着多个查询。
- 现在,如果您在 Posts 表中添加一个“评论数”字段:
- 您只需要一个查询就可以列出帖子
- 并且不需要查询 Comments 表:评论的数量已经反规范化到 Posts 表。
- 而且只返回一个字段的查询比更多查询要好。
现在,有一些成本,是的:
- 首先,这会在磁盘和内存中占用一些空间,因为您有一些冗余信息:
- 评论数存储在Posts表中
- 您还可以在评论表中找到这些数字
- 其次,每次有人添加/删除评论时,您都必须:
- 当然是保存/删除评论
- 同时更新 Posts 表中的相应编号。
- 但是,如果阅读您博客的人多于写评论的人,这可能还不错。
关于database - 反规范化以何种方式提高数据库性能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2349270/