У меня есть таблица из 5 651 744 строк с первичным ключом из 6 столбцов (int x 3, smallint, varchar (39), varchar (2)). Я хочу улучшить производительность с помощью этой таблицы и другой таблицы, которая разделяет этот первичный ключ плюс дополнительный добавленный столбец, но имеет 37-метровые строки.Столкновения CHECKSUM() в SQL Server 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), можете ли вы его сбросить или заменить на столбец идентификатора? –
Почему это проблема для вас? Что вам нужно сделать? –
Проблема заключается в том, что у меня есть 200-миллиметровые строки производной статистики для создания из 37-метровых строк статистики, а PIVOT для выполнения вычислений должен поворачиваться на очень большом ключе, что привело к неприятной очереди на все 37-метровые строки в tempdb. –