0

我正在为我们期望有很多行(超过 100 亿行)的表做一些表设计实验。马上想到的一些事情:

  • 在我所说的“高”表方法中,每一行将有大约 25 种“类型”中的一种,以及对应于该类型的值。我应该把它变成一种“宽方法”吗?单行包含每个类型的值的 NULLable 列?从可维护性的角度来看,这不是一个很好的方法(如果我必须添加更多“类型”怎么办),但我更关心性能,尺寸是次要考虑因素。
  • 行将有一个日期时间戳(可能是一个小的日期时间,因为我只需要分钟)。我听说在表格中使用整数表示日期时间而不是日期时间本身可能会更好。我希望这个日期时间将在查询中大量使用(甚至可能在某种程度上它是聚集索引的一部分)。

我主要关心的是查询性能,然后是大小。大量数据将被转储到表中,但不会发生太大变化或增长(可能是每天或每月更新,但不会有很多更新,也不是任何我认为是事务性的)。

4

1 回答 1

1

您可能会从表分区中受益。SQL Server 和 Oracle 都很好地支持此功能。表分区允许您保留一个将继续查询的逻辑表,但 DBMS 实际上会分解为几个物理文件,这些文件使用您指定的规则进行维护。例如,您可以有基于日期的分区,因此 CreateDate 在 1990、2000、2010 或 2020 之间的行将被放置在它们各自的分区中。

DBMS 还使用分区来利用并行性,并且可以提高跨多个分区的查询的性能。

在数据库分区之外,如果不对难以维护并使查询更加复杂的表进行分片,您将不会看到性能提升。

有关分区的 Microsoft 文档

更新:当您考虑使用整数作为日期时间来提高性能时,如果您将索引放在整数日期上,实际上会这样。这样做的原因是整数更容易排序,因此创建 B-Tree 索引将提高该特定索引的整体速度。但是,如果您不打算使用该列进行查询(在 where 或 group by 子句中),则不建议只添加索引,因为可以。事实上,如果您的索引存储大于表的大小,我不会感到惊讶。

于 2011-12-08T22:01:55.930 回答