我有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效率低下。
寻找有关如何构建它的建议,以便更好地插入和查找性能以及减少索引碎片。
答案 0 :(得分:1)
我会将表拆分为物理文件,将旧的不变数据放在只读文件组中。确保非聚集索引也在文件组中。
编辑(来自评论):虽然我正在考虑这个问题,但如果您关闭网页级压缩,那么这也会改善I / O.
答案 1 :(得分:1)
我认为它应该是事实表中的退化维度。
并想办法对数据进行分区。也许拿第一个xxx字符并将它们存储为一个单独的字段,并按此分区。 然后当你进行查找时,你会传递短列和长列,所以它首先在一个分区中查找。