какой тип данных использовать для уникального ключа / индекса MySQL - PullRequest
0 голосов
/ 10 марта 2011

Можно ли использовать INT в качестве типа данных для индекса в MySQL.Я не уверен, что это лучший способ, так как я полностью ожидаю, что в этой таблице будет много записей, которые в конечном итоге будут «переполнены» INT

. Я сомневаюсь, что что-то вроде Facebook использует INT для своего индекса начто-то вроде таблицы на стене или что-то еще, что могло бы вызвать большой трафик / получить много записей.

Есть мысли?

Ответы [ 3 ]

2 голосов
/ 10 марта 2011

использование INT( 11 ) UNSIGNED ZEROFILL NOT NULL

1 голос
/ 10 марта 2011

Вообще говоря, у вас есть два варианта:

A ' естественный ключ ', который отражает реальность данных, с которыми вы работаете.Например, телефонный номер может быть действительным первичным ключом для списка вызовов, но он совсем не подходит, скажем, для списка получателей медицинских услуг, поскольку многие люди могут использовать один и тот же номер телефона в доме.Обратите внимание, что естественный ключ может состоять из нескольких полей.Например, комбинация Марка, Модель и Год может быть ключом для списка моделей автомобилей.

Суррогатный ключ ', с другой стороны, является просто произвольным значениемчто вы назначаете на строку.Если вы идете по этому пути, я бы рекомендовал использовать GUID (UUID в MySql). Лучший из известных мне способов представить их в MySQL - использовать столбец char (36).Идентификаторы GUID фактически уникальны навсегда и могут использоваться бесконечно.

Если вы настаиваете на использовании простого старого числа, то INT, вероятно, в порядке, или вы можете использовать BIGINT , чтобы быть уверенным.

BIGINT UNSIGNED ZEROFILL
1 голос
/ 10 марта 2011

INT может достигать более 2 миллиардов (вдвое больше, если не подписано). Если вы ожидаете, что в вашей таблице будет больше строк, чем этот, вы можете использовать BIGINT (значение без знака возрастает до 18 446 744 073 709 551 615 - вероятно, больше, чем нужно даже Facebook).

...