上下文:我有一个包含20列的表格。该表包含从文件导入的记录,以后必须对其进行处理。因此,存在名为ProcessDateTime
的列,以将记录标记为已处理。
此表将达到数百万条记录。有些记录将永远不会被处理。
我有几个问题:
ProcessedDateTime
吗?谢谢
编辑: 选择数据时,我希望未处理且不早于一个月的记录。因此,我将有一个日期字段来告诉我何时插入它们。
答案 0 :(得分:2)
我不建议将记录分离到一个单独的表中,这只会使数据库的管理更加复杂。
在设计数据库时,一个非常重要的考虑因素是将运行查询,而不仅仅是理论上的考虑。我猜想您想快速访问ProcessDateTime
为NULL
的行。
在这种情况下,您要担心的是,您需要的行将被细分散在许多行中。反过来,这意味着您在内存中有很多数据页,但是大多数记录将不受欢迎,因为该值不是NULL
。
数据库还有另外两个选项可以解决此问题:聚集索引和分区(尽管并非所有数据库都支持它们)。将NULL
值更新为非NULL
值时,这两种方法都会产生额外的开销-基本上,记录需要“切换”分区/数据页位置。
也就是说,在某些情况下,拥有未处理的行表是有意义的,然后在处理后将它们“存档”。尽管功能相同,但问题的描述却不同。在此描述中,重点放在未处理的行上。经过处理后,它们将保存在归档中,而这些值可能不会更改。