Добавьте два индекса в одно и то же поле в MySql

I have a table like this:

something
a [INT]
b [INT]
c [INT]

...where a, b and c are separate Foreign Keys pointing to three different table.id. Since I want to make all regs be unique, and after having read this great answer, I think I should create a new Index this way: UNIQUE INDEX(a, b, c) and (in my case) do IGNORE INSERTS.

But as you can see, I would have one KEY for each column and then another extra UNIQUE INDEX containing all three. Is this a normal thing? It seems strange to me, and I have never seen it.

1
nl ja de

2 ответы

Создание первичного ключа, если что-то (a, b, c) аннулирует необходимость в уникальном индексе. Дополнительный уникальный индекс имел бы смысл, если ваш первичный ключ был «Кое-что» (a, b), и вам нужен уникальный индекс (a, b, c). Но так как все три столбца являются Foreignkey, то основным ключом является то, что вы.

1
добавлено

Совершенно нормально и разумно включать столбцы в несколько индексов. Однако, если комбинации (a, b, c) достаточно, чтобы однозначно идентифицировать строку, кажется, что вы хотите использовать индекс PRIMARY вместо UNIQUE здесь (технически есть очень мало различий, но семантически это может быть лучший выбор).

1
добавлено
@MarkTower: То, что Q и A заслуживают нашего внимания, наверняка.
добавлено автор Jon, источник
Спасибо. Вот отличный ответ для тех, кто не знает различий между PRIMARY и UNIQUE ( stackoverflow.com/a/708508 ) , Принимая ваш ответ через несколько минут;
добавлено автор Mark Tower, источник
DBA - русскоговорящее сообщество
DBA - русскоговорящее сообщество
1 345 участник(ов)

Общаемся и обсуждаем темы, посвященные DBA, PostgreSQL, Redis, MongoDB, MySQL, neo4j, riak и т.д. См. также: @devops_ru, @kubernetes_ru, @docker_ru, @nodejs_ru Рекомендуем сразу отключить уведомления, чтобы пребывание здесь было полезным и комфортным.

MySQL
MySQL
995 участник(ов)

The group is about MySQL. For code use hastebin.com. Admin: @smlkw