我已經得到的5651744行的表,用由6列的主鍵(INT×3,SMALLINT,VARCHAR(39),VARCHAR(2))。我期望通過此表和另一個表共享此主鍵以及添加一個附加列但具有37m行的另一個表來提高性能。校驗和()的碰撞2005
在添加一列創建哈希鍵的期待,我做了一個分析,發現18,733衝突。
SELECT SUM(CT)
FROM (
SELECT HASH_KEY
,COUNT(*) AS CT
FROM (
SELECT CHECKSUM(DATA_DT_ID, BANK_NUM, COST_CTR_NUM,
GL_ACCT_NUM, ACCT_NUM, APPN_CD) AS HASH_KEY
FROM CUST_ACCT_PRFTBLT
) AS X
GROUP BY HASH_KEY
HAVING COUNT(*) > 1
) AS Y
SELECT COUNT(*)
FROM CUST_ACCT_PRFTBLT
這是大約兩倍的壞與給定的目標空間,我需要覆蓋的較小的相對量BINARY_CHECKSUM()
這看起來太高(0.33%)?如果碰撞率很高,考慮到您還需要加入常規列以處理偶爾發生的碰撞,那麼在聯接中首先加入這個製造的密鑰會使每行多餘的4字節的代價有什麼好處?
您一次加入多少條記錄?細節表是否有聚集索引?有多寬?如果聚集索引很寬(即它包含所有FK),您可以放棄它還是將其替換爲標識列? – 2009-06-24 03:18:02
爲什麼這是你的問題?你需要完成什麼? – 2009-07-06 13:27:30
問題是,我有200m行導出的統計信息從37m行的統計信息中產生,並且執行計算的PIVOT必須在一個非常大的密鑰上進行轉換,這導致了所有37m行到tempdb的令人討厭的急切後臺處理。 – 2009-07-06 14:33:29