MySQL: первичный ключ - это 8-байтовая строка. Лучше использовать BIGINT или BINARY (8)? - PullRequest
5 голосов
/ 04 сентября 2011

Нам нужно хранить много строк в таблице MySQL (InnoDB), каждая из которых имеет 8-байтовую двоичную строку в качестве первичного ключа. Мне было интересно, лучше ли было использовать тип столбца BIGINT (который содержит 64-битные, то есть 8-байтовые целые числа) или BINARY (8), который имеет фиксированную длину.

Поскольку мы используем эти идентификаторы в качестве строк в нашем приложении, а не числа, их хранение в виде двоичных строк звучит для меня более логично. Тем не менее, мне интересно, есть ли проблемы с производительностью с этим. Есть ли какая-то разница?

Если это имеет значение, мы читаем / храним эти идентификаторы в шестнадцатеричном формате (например, page_id = 0x1122334455667788). В любом случае мы не будем использовать целые числа в запросах, так как мы пишем приложение PHP и, как вы наверняка знаете, не существует типа «unsigned long long int», поэтому все целые числа зависят от машины.

1 Ответ

2 голосов
/ 04 сентября 2011

Я бы использовал двоичный код (8), если он соответствует вашему дизайну.

В противном случае у вас всегда будут накладные расходы на преобразование производительности или сложности.Между типами на уровне СУБД не будет большой (если таковая имеется) разницы

...