大规模ETL字符串查找性能问题

时间:2009-09-14 14:36:13

标签: sql-server sql-server-2008 etl data-warehouse

我有ETL流程性能问题。我有一张表有4亿多行的表。结构是:

  • id bigint identity(1,1)
  • raw_url varchar(2000)not null
  • md5hash char(32)not null
  • job_control_number int not null

md5hash上的id和非群集唯一索引的群集唯一索引

SQL Server 2008 Enterprise 页面级别压缩已打开

我们必须将来自Web服务器日志的原始URL存储为维度。由于原始字符串> 900个字符我们无法在该列上添加唯一索引。我们使用md5哈希函数来创建唯一的32个字符串以用于索引目的。我们不能在表中允许重复的raw_url字符串。

问题是表现不佳。 md5hash当然是随机的,因此索引碎片驱动到50%会导致IO效率低下。

寻找有关如何构建它的建议,以便更好地插入和查找性能以及减少索引碎片。

2 个答案:

答案 0 :(得分:1)

我会将表拆分为物理文件,将旧的不变数据放在只读文件组中。确保非聚集索引也在文件组中。

编辑(来自评论):虽然我正在考虑这个问题,但如果您关闭网页级压缩,那么这也会改善I / O.

答案 1 :(得分:1)

我认为它应该是事实表中的退化维度。

并想办法对数据进行分区。也许拿第一个xxx字符并将它们存储为一个单独的字段,并按此分区。 然后当你进行查找时,你会传递短列和长列,所以它首先在一个分区中查找。