我有一个表,每秒添加3行数据,我打算保留大约30M行。 (旧的数据将被删除)。
我需要添加一列:varchar(1000)。我不能事先告诉它内容是什么,但我知道它会非常重复:数千到数百万行将具有相同的值。它通常大约200个字符。
由于使用存储过程添加数据,我看到两个选项
我知道这两个选项之间的一些权衡,但我很难在这个问题上下定决心。
选项1比较重但插入速度更快。需要较少的连接,因此查询更简单。 选项2是较轻的插入取longers但查询有可能更快。我认为我更接近正常形式,但我还有一个有一个有意义的专栏的表。
根据我给你的信息,哪个选项似乎更好? (你也可以提出另一种选择)。
答案 0 :(得分:2)
你还应该调查page compression,也许你可以做一件简单的事情,但仍然得到一个小的(ish)表。虽然,如果您说是SQL Express,您将无法像企业版要求那样使用它。
我在我的项目中反复使用了你的第二种方法。每个插入都必须通过一个获取查找值id的存储过程,或者如果找不到则插入一个新的并返回id。特别是对于像你这样的大型列而言,由于存在大量行但这么少的不同值,空间节省应该超过查询连接中外键和查找成本的额外开销。另请参阅Disk is Cheap... That's not the point!。