Как работает INDEX для составного первичного ключа в mysql?

12

При создании составного первичного ключа для двух или более столбцов, например PRIMARY KEY(col1, col2, col3); Будет ли система INDEXкаждого столбца в отдельности?

Причина, по которой я задаю этот вопрос, состоит в том, что когда мы используем UNIQUE INDEX (col1, col2, col3)его, он действует как INDEXдля первого столбца, и нам нужно создать дополнительные INDEXs для других столбцов. Я хочу знать, так ли это для составного первичного ключа.

Googlebot
источник

Ответы:

16
  1. Составной первичный индекс всегда будет гарантировать, что комбинация значений col1, col2, col3 является уникальной. Если целью индекса является обеспечение уникальности значений, то вы достигнете

  2. Составной индекс также обеспечивает совпадения индексов для любой комбинации столбцов col1, col2 и col3.

  3. Вы должны создать отдельные индексы для col2 и col3, если вы присоединяетесь или фильтруете, используя один из столбцов без других.

  4. Я всегда предпочитаю числовой первичный ключ (без связи с бизнесом) и уникальные индексы над составным первичным ключом, где это необходимо.

Стивен Сенкомаго Мусоке
источник
1
хорошие моменты! тогда составной первичный ключ похож на UNIQUE INDEX, и у нас нет индекса для 2-го, 3-го, ... столбцов для быстрой выборки строки?
Googlebot
1
@ssmusoke Могу ли я предположить из пропуска col1в пункте 3, что SELECT * WHERE col1 = 10будет эффективным?
Энди
2
@Andy # 3 является дополнением к составному индексу col1, col2 и col3, поэтому будет использоваться составной индекс. Однако если вы выполняете фильтры для col2 и col3 без col1, то вам нужны отдельные индексы для каждого из них отдельно
Стивен Сенкомаго Musoke
3
Наличие индекса для col1, col2 и col3 означает, что SELECT * FROM col1 = 10 будет эффективным, поскольку col1 является первым столбцом в индексе, поэтому # 3 позволяет вам сделать то же самое для col2 и col3, так что если вы Фильтруйте только по этим столбцам без столбца col1, затем столбцы также индексируются
Стивен Сенкомаго Musoke
2
@PaulWasilewski да, действительно, есть особые случаи, когда составной первичный ключ имеет смысл, но это только особые случаи.
Стивен Сенкомаго Мусоке