с другой стороны, я могу себе представить, что
внутренне СУБД будет вычислять хеш
ключи, чтобы уменьшить штраф.
БД должна поддерживать B-Tree (или аналогичную структуру) с ключом, чтобы они были упорядочены.
Если ключ хешируется и сохраняется в B-дереве, было бы неплохо быстро проверить уникальность ключа - ключ все еще можно найти эффективно. Но вы не сможете найти эффективный для диапазон данных (например, с LIKE
), потому что B-дерево больше не упорядочено в соответствии со значением String.
Так что я думаю, что большинство БД действительно хранит строку в B-дереве, которое может (1) занять на пробел больше, чем числовые значения и (2) требует, чтобы B-дерево было -balanced , если ключи вставлены в произвольном порядке (нет понятия увеличения значения, как с числовым pk).
Наказание на практике может варьироваться от незначительного до огромного. Все зависит от использования, количества строк, среднего размера строкового ключа, запросов, которые присоединяются к таблице и т. Д.