SQL Server 2016 - 批量插入之前或之后的压缩

时间:2016-09-08 22:19:35

标签: sql sql-server

我有大约90GB的未压缩.csv数据要导入SQL Server。根据接口的最终要求,我可能会或可能不会对这些数据进行分区 - 但无论我能否,这些都将成为一些大表。虽然总数很大,但行相对简单:

[Exchange]  [Symbol]    [Compare_To_Exchange]   [Compare_To_Symbol] [Date]  [Correlation]
NYSE         ZTS        INDEX                   DCXE                12/9/2013 0:00  -0.5521076

我不熟悉压缩SQL Server表,正在阅读。我现在无法找到答案的一个问题是,在表空的情况下压缩表是否更好(性能或任何其他方式),让批量事务进​​行压缩,或者插入所有数据和压缩?

从表面上看,我在想它是空的(就像在空表上创建聚簇索引比在完整的表上更容易),但我读过的一篇文章接近于这个主题似乎表明一旦桌子满了就应该进行压缩。我很欣赏任何一个知道差异的人的经历。感谢您的时间,并提前了解您可以提供的任何想法,信息或指示。

1 个答案:

答案 0 :(得分:1)

重要的是要记住您在这里制作数据库而不是CSV文件。压缩在CSV文件中很有意义,但在精心设计的数据模型中却没有。压缩对非结构化数据有意义,但您有结构化数据。

如果您将数据标准化,则根本不需要压缩。在您的示例中,您显示4或5个字的数据加上时间戳加上可能是32位数字。所以每行少于160位。

更清楚 - >

[Exchange]            -> 16 bit index to look up in exchange table.
[Symbol]              -> 16 bit index to look up in symbol table
[Compare_To_Exchange] -> 16 bit index to look up in compare table
[Compare_To_Symbol]   -> 16 bit index to look up in compare table
[Date]                -> 64 bit timestamp
[Correlation]         -> 32 bit numeric

这将比CSV

小得多

如果查找表很小,您甚至可以制作这些8位索引中的一些。如果那是一个日期,而不是一个小得多的时间戳。

或者如果你很懒,你可以使用32位整数甚至64位 - 但行仍然很小。如果您在设计中使用数据结构。