Я создаю базу данных пользователей ... Я хочу отделить номер пользователя и мобильного телефона от таблицы 'user' и создать для нее другую таблицу (user_cellphone (table))
, но у меня проблема с выбором лучшего index!
в таблице user_cellphone, мы получаем user_id и номер мобильного телефона ... но все запросы SELECT больше основаны на user_id, поэтому я хочу знать, лучше ли выбрать столбец user_id в качестве первичного ключа или не !!!
(также у каждого пользователя есть только один номер мобильного телефона!)
, какой из этих двух вариантов лучше?
CREATE TABLE `user_cellphone_num` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`cellphone_country_code` SMALLINT UNSIGNED NOT NULL,
`cellphone_num` BIGINT UNSIGNED NOT NULL,
`user_id` INT UNSIGNED NOT NULL,
PRIMARY KEY (`id`),
UNIQUE INDEX `cellphone` (`cellphone_country_code`, `cellphone_num`),
UNIQUE INDEX `user_id` (`user_id`)
)
CREATE TABLE `user_cellphone_num` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`cellphone_country_code` SMALLINT UNSIGNED NOT NULL,
`cellphone_num` BIGINT UNSIGNED NOT NULL,
`user_id` INT UNSIGNED NOT NULL,
PRIMARY KEY (`user_id`),
UNIQUE INDEX `id` (`id`),
UNIQUE INDEX `cellphone` (`cellphone_country_code`, `cellphone_num`)
)
выбрав «user_id» в качестве первичного ключа или просто установите «user_id» в качестве уникального ключа ?! Есть ли здесь что-то другое в производительности? (Я имею в виду, когда у меня миллионы строк)
в будущем я собираюсь использовать некоторые запросы, подобные этому:
select u.*,cell.* FROM user AS u LEFT JOIN user_cellphone AS cell ON cell.user_id = u.id
, поэтому один из этих вариантов даст мне лучшую производительность для некоторых запросов как это?