【问题标题】:Large db table with many rows or many columns具有多行或多列的大型数据库表
【发布时间】:2017-04-26 17:26:28
【问题描述】:

我尝试过规范化的表格设计。问题(也许)是我们正在生成大量数据,因此产生了很多行。目前,数据库的大小每天增加 0.25 GB。

主表是 Samples an Boxes。从 Samples 到 Boxes 是一对多的关系。 示例表:

ID | Timestamp | CamId 

盒子表:

ID | SampleID | Volume | ...

我们每 5 秒分析 19 个样本,平均每个样本有 7 个框。即 19*7*12 = 每分钟 1596 个盒子,1596*60*24 = 2,298,240 行在 Boxes 表中,平均每天。

此设置可能会运行数月。此时 Boxes 表大约有 2500 万行。

问题是;有这么多数据,我应该担心数据库大小、表大小和表设计吗?

或者我应该有一张这样的桌子

ID | SampleID | CamId | Volume1 | Volume2 | ... | Volume9 | ...

【问题讨论】:

  • 您对相关表有哪些索引?
  • @TT。我在 ID 列上有主键。在 Samples 上,我对 Timestamp 和 CamId 有一个独特的多列约束。在 Boxes 上,我对 SampleId 也有一个多列约束,并且未显示另一列外键列
  • 了解如何使用索引设计数据库以加快查询速度。例如:SQL Server Index Design Guide.
  • 那么您可能还想了解表分区,因为您将拥有大量的行数和表大小。例如:SQL Server Table Partitioning: Resources.
  • 如果您使用的是企业版,我会选择分区(在SQL2016中,此限制已被删除,现在分区不仅限于企业版)

标签: sql-server database


【解决方案1】:

根据数据的有效性,您可以实施数据清除。 我的意思是:你真的需要几天前、几个月前、几年前的数据吗?如果您有使用数据的时间限制,请清除它们,您的数据表应该会在设定的时间后停止(或可能)停止增长。

这样一来,您就不必为了尺寸而太在意任何一种架构。

否则答案是肯定的,你应该关心。许多表中的单独概念可以为您提供很好的性能调整,但在很长一段时间后可能在访问时间方面还不够。考虑查看 NoSQL 解决方案或类似解决方案以存储大量行。

【讨论】:

  • 我们仍在讨论需要多长时间的数据。因此,某种形式的数据清除可能是个好主意。
【解决方案2】:

有一个简单的规则:当您认为必须在列名中加上数字时,您可能需要一个相关表

数据量大致相同,这里没有胜利。

我会尝试对表进行分区。 AFAIK 此功能绑定到企业版,但是 - 根据 this document - SQL Server 2016 SP1 表和索引分区甚至下降到 Express!

主要问题是:您打算如何处理这些数据?

如果您必须对一切运行分析脚本,那么没有比购买更好的硬件更好的提示了。
如果您的需求参考过去 3 周的数据,您可以使用分区。

如果您还不能使用此功能(由于您的服务器版本),您可以在常规作业中创建一个存档表并将较旧的数据移动到该表中。 UNION ALL 视图仍然可以获取全部内容。使用SCHEMA BINDING,您甚至可以获得索引视图的优势。

在这种情况下,将工作数据保存在最快的驱动器中并将存档表放在其他地方的大型存储中的单独文件中是很聪明的。

【讨论】:

  • 分区听起来是个好主意。如果它在 2016 Express 中可用,那就太棒了!您是否知道它会如何影响性能?
  • @smok 您问它将如何影响性能...这取决于您在做什么...总体思路是相同的,正如我所描述的存档表。优点是,SQL Server 将自动完成繁重的工作,并将使用此信息优化统计信息和索引...如果您的工作数据是一个小数据集(比如说 过去 3 个月),虽然你偶尔需要整套,但效果会非常显着。
【解决方案3】:

问题是,对于这么多数据,我应该担心数据库大小、表大小和表设计吗?

我的答案是YES:

1. A huge amount of data(daily) should affect your storage in hardware part.
2. Table normalized is a must mostly if you are storing bytes or images.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-06
    • 1970-01-01
    • 2018-02-17
    相关资源
    最近更新 更多