我有一个包含 5,651,744 行的表,主键由 6 列(int x 3、smallint、varchar(39)、varchar(2))组成。我希望使用此表和另一个共享此主键的表以及添加的附加列但有 37m 行来提高性能。
为了添加一列来创建哈希键,我进行了分析,发现了 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%)?如果冲突如此之高,那么在连接中首先加入这个制造的密钥是否有好处,因为您仍然必须加入常规列以处理偶尔的冲突?