非规范化会提高SQL的性能吗?

时间:2014-04-22 12:54:52

标签: sql database performance data-warehouse

我想加快我们的SQL查询。我已经开始阅读一本关于Datawarehousing的书,你有一个单独的数据库,其中包含不同表格中的数据等。问题是我不想为每个客户创建一个单独的报告数据库,原因如下:

  1. 我们有200多个,对这些数据库的维护就足够了
  2. 必须立即提供报告数据
  3. 我想知道,如果我可以简单地对我报告的表进行非规范化,因为目前有很多JOIN并认为这些都很昂贵(表中大约有20,000,000行)。如果我将数据复制到多个表中,这会增加性能吗?我知道数据在整个地方被复制存在问题,但从历史的角度来看,这也有好处。

3 个答案:

答案 0 :(得分:1)

非规范化并不能保证性能的提升。

您是否考虑过调整应用程序的查询?查看正在运行的报告,确定可以添加索引和分区的位置。也许大多数报告只查看上个月的数据 - 您可以按月对数据进行分区,因此查询时只需要读取少量表。如果替代方案是一个需要大量全表扫描而不是几个索引扫描的大型非规范化表,则JOIN不一定是昂贵的......

您的问题过于笼统 - 请与您的DBA讨论如何对报告查询进行一些跟踪(并查看计划),了解您可以采取哪些措施来帮助提高报告效果。

答案 1 :(得分:1)

问题非常笼统。很难回答非规范化是否会提高绩效。

基本上,它可以。但就个人而言,我不会将非规范化视为报告问题的解决方案。在我的实践业务中,人们喜欢建立huuuge报告,这会在最短的时间内杀死OLTP DB。我会继续阅读Datawarehousing:)

答案 2 :(得分:-1)

对于OLAP应用程序,可以通过非规范化来提高性能。但如果你为你的OTLP应用程序使用相同的非规范化表,你会看到那里的性能瓶颈。我建议您为报告目的创建新的denormlize表或物化视图,并且您可以逐步快速刷新MV,以便立即获得报告数据。