Sql 限制二进制哈希类型索引上的碎片

Sql 限制二进制哈希类型索引上的碎片,sql,sql-server,hash,indexing,Sql,Sql Server,Hash,Indexing,我正在(实验性地)做一个项目,我必须将多个数据集中的数据合并到一个SQL Server 2012数据库中。有些数据在这些集合中是重复的,我正在研究一种检测和删除重复数据的方法。我当前的测试是对数据项进行散列,并检查是否存在重复的散列。到目前为止,这似乎工作得很好(如果存在哈希冲突,这并不是世界末日) 我将这个散列以“二进制(32)”的形式存储在数据库中,每当我需要插入新行时(实际上我使用的是合并),我都会查找散列值,只有在找不到时才插入。我在散列上有一个索引来帮助这个搜索 我遇到的问题是索引总是

我正在(实验性地)做一个项目,我必须将多个数据集中的数据合并到一个SQL Server 2012数据库中。有些数据在这些集合中是重复的,我正在研究一种检测和删除重复数据的方法。我当前的测试是对数据项进行散列,并检查是否存在重复的散列。到目前为止,这似乎工作得很好(如果存在哈希冲突,这并不是世界末日)

我将这个散列以“二进制(32)”的形式存储在数据库中,每当我需要插入新行时(实际上我使用的是合并),我都会查找散列值,只有在找不到时才插入。我在散列上有一个索引来帮助这个搜索

我遇到的问题是索引总是非常零碎,我确信这一定会不必要地减慢速度。我认为这是由于二进制数据近乎随机

是否有任何索引选项可用于限制此碎片?目前我只是使用默认值。任何线索都将不胜感激


提前感谢。

很遗憾没有答案,但我确实发现在插入阶段定期重建索引有帮助,但显然会带来额外的开销。这并不特别值得。我怀疑使用填充因子的实验可能也有帮助,但还没有时间对此进行全面研究。

不幸的是没有答案,但我确实发现在插入阶段定期重建索引有帮助,但显然会带来额外的开销。这并不特别值得。我怀疑尝试填充因子也会有所帮助,但还没有时间对此进行全面研究。

您是在创建表之前创建索引的吗?如果先加载数据,然后创建索引,索引通常工作得更好。因此,您可以尝试合并一个新表,删除索引,然后重新创建它。我是肯定的,但是索引在加载表的过程中被大量使用(事实上,这就是为什么它首先存在的原因!),因此在加载后添加它会有点多余。谢谢你的评论。首先,我要测试一下这是否会带来不同。给一个小的测试运行计时。然后重建索引
ALTER index rebuild
,以减少碎片。然后再进行一次小规模的运行。是否在创建表之前创建索引?如果先加载数据,然后创建索引,索引通常工作得更好。因此,您可以尝试合并一个新表,删除索引,然后重新创建它。我是肯定的,但是索引在加载表的过程中被大量使用(事实上,这就是为什么它首先存在的原因!),因此在加载后添加它会有点多余。谢谢你的评论。首先,我要测试一下这是否会带来不同。给一个小的测试运行计时。然后重建索引
ALTER index rebuild
,以减少碎片。然后再做一次小跑步。