【发布时间】:2009-09-14 14:36:13
【问题描述】:
我遇到了 ETL 流程性能问题。我有一张表,里面有 4+ 十亿行。结构是:
-
idbigint identity(1,1) -
raw_urlvarchar(2000) 不为空 -
md5hashchar(32) 不为空 -
job_control_numberint 不为空
id 上的聚集唯一索引和 md5hash 上的非聚集唯一索引
SQL Server 2008 企业版 页面级压缩已开启
我们必须将来自网络服务器日志的原始 URL 存储为一个维度。由于原始字符串 > 900 个字符,我们不能在该列上放置唯一索引。我们使用 md5 散列函数来创建唯一的 32 个字符的字符串以用于索引目的。我们不能在表中允许重复的 raw_url 字符串。
问题是性能不佳。 md5hash 本质上当然是随机的,因此索引碎片驱动到 50%,这导致 IO 效率低下。
寻求有关如何构建它以实现更好的插入和查找性能以及更少的索引碎片的建议。
【问题讨论】:
标签: sql-server sql-server-2008 etl data-warehouse