Tôi đã có một bảng 5,651,744 hàng, với khóa chính được tạo thành từ 6 cột (int x 3, smallint, varchar (39), varchar (2)). Tôi đang tìm cách cải thiện hiệu suất với bảng này và một bảng khác chia sẻ khóa chính này cộng với cột bổ sung được thêm nhưng có 37m hàng.CHECKSUM() va chạm trong SQL Server 2005
Với dự đoán thêm cột để tạo khóa băm, tôi đã thực hiện phân tích và tìm thấy 18.733 xung đột.
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
Đó là về gấp đôi xấu với BINARY_CHECKSUM()
Điều này dường như quá cao (0,33%) đưa ra số lượng tương đối nhỏ của không gian nơi tôi bao gồm? Và nếu các va chạm cao như thế này, có lợi ích khi tham gia khóa sản xuất này đầu tiên trong tham gia với chi phí thêm 4 byte cho mỗi hàng không, vì bạn vẫn phải tham gia vào các cột thông thường để xử lý sự va chạm không thường xuyên?
Bạn đang tham gia bao nhiêu hồ sơ? Bảng chi tiết có chỉ mục nhóm không? Rộng bao nhiêu? Nếu chỉ mục nhóm được mở rộng (tức là, nó bao gồm tất cả các FK), bạn có thể thả nó hoặc thay thế nó bằng một cột nhận dạng không? –
Tại sao nó là một vấn đề cho bạn? Bạn cần làm gì? –
Vấn đề là tôi có 200m số liệu thống kê có nguồn gốc để sản xuất từ 37m hàng thống kê và PIVOT để thực hiện các phép tính có trục chính trên một khóa rất lớn dẫn đến một ống chỉ mong muốn của tất cả 37m hàng đến tempdb. –