具有规范化或非规范化表的更高性能

时间:2012-10-17 21:35:23

标签: .net sql sql-server performance normalization

我目前正在开发一个mvc应用程序来从现有的sql server数据库中读取。数据库是非规范化的 - 我正在考虑修改一些表以将其标准化到一定程度。

这导致与开发人员讨论作为读取数据的最佳方式,或者结构是否应该改变。数据将通过ado.net使用存储过程读取。我的问题是,在表中有多个字段(非规范化)或者有多个具有内部连接(规范化)的表来检索数据是否更高效?

我应该提到,表上的操作将是95%读取,5%写入。

5 个答案:

答案 0 :(得分:3)

您应该使用非规范化数据进行数据分析,密集报告使用情况。对于上述用途,具有非规范化的目的将有助于提高性能。

对于您要实现的应用程序,如果没有太多的知识,对于“标准”客户端 - 服务器应用程序,您应该在DOM中使用大量的类并阅读&我不断地写数据,我会投票来规范数据,尽可能避免维护重复的数据。尝试简化表格的设计,以便他们对您的域模型感到“舒服”。

因此,简单地说,标准化的密集数据读取的性能更高,非正规化更高效(并且更全面)用于密集读取&写域对象模型类。

答案 1 :(得分:1)

为报告应用程序保持标准化。

只要非标准化结构符合您的需求,它就会更快。

如果它是从规范化的数据库中填充的,那么一切都很好。即使不是我仍然不会规范化这个数据库,我会为数据收集创建一个规范化版本,然后用它来填充你当前的结构。

设计危害你必须从一个数据库进行收集和报告,不需要花费太多时间比另一个数据库服务器和某种类型的传输费用。

答案 2 :(得分:0)

如果你要阅读的不仅仅是写作,那么非规范化是一个好主意。

如果您的写作不仅仅是阅读,那么您应该将表格标准化。

如果您不确定,或者将两者混合使用,请尝试使用这两种配置进行基准测试或负载测试,并查看哪种更适合您的应用。

答案 3 :(得分:0)

检索非规范化数据是一个不错的选择,因为较少的连接数,存储比性能成本便宜。

答案 4 :(得分:0)

规范化主要是为了消除重复,便于维护和最小化所需的存储。

非规范化主要是为了提高特定查询的性能,但由于某些数据是重复的(通常是关键数据),它确实使维护变得更加棘手,并增加了存储需求。