我有一个 ETL 过程性能问题。我有一张表,里面有 4+ 十亿行。结构是:
id
bigint 身份(1,1)raw_url
varchar(2000) 不为空md5hash
char(32) 不为空job_control_number
int 不为空
id 上的聚集唯一索引和 md5hash 上的非聚集唯一索引
SQL Server 2008 Enterprise 页面级压缩已打开
我们必须将来自网络服务器日志的原始 URL 存储为维度。由于原始字符串 > 900 个字符,我们不能在该列上放置唯一索引。我们使用 md5 哈希函数来创建唯一的 32 个字符的字符串以用于索引目的。我们不能在表中允许重复的 raw_url 字符串。
问题是性能不佳。md5hash 本质上当然是随机的,因此索引碎片驱动到 50%,这导致 IO 效率低下。
寻找有关如何构造它以允许更好的插入和查找性能以及更少的索引碎片的建议。