我有一些具有相同基本结构的非常大的表。每个都有一个RowNumber (bigint)
和DataDate (date)
列。每天晚上使用SQLBulkImport加载数据,并且从未加载过任何“新”数据-它是历史记录(SQL Standard,不是Enterprise,因此没有分区)。
因为每个数据位都需要绑定到其他系统,并且每个RowNumber/DataDate
组合都是唯一的,所以这就是我的主键。
我注意到,由于我在SSMS Table Designer中定义PK的方式,RowNumber
第一和DataDate
第二列出了。
我还注意到,我的碎片始终非常高,高达〜99%。
现在,由于每个DataDate
索引仅出现一次,所以我希望索引器每天都添加到页面中,但是我想知道它是否实际上是RowNumber
首先基于索引编制的,因此是否需要转移其他所有内容?
Rownumber
不是一个标识列,它是一个由外部系统生成的int(很糟糕)。它在每个开始时重置DataDate
。
示例数据
RowNumber | DataDate | a | b | c.....
1 |2013-08-01| x | y | z
2 |2013-08-01| x | y | z
...
1 |2013-08-02| x | y | z
2 |2013-08-02| x | y | z
...
数据按RowNumber
顺序加载,DataDate
每次加载一次。
导入过程为bcp-我尝试加载到临时表中,然后从中按顺序选择(ORDER BY RowNumber, DataDate
),但仍然会出现高碎片。