Як працює INDEX на складеному первинному ключі в mysql?


12

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

Причиною того, що я задаю це питання, є те, що коли ми використовуємо UNIQUE INDEX (col1, col2, col3), він діє, як лише INDEXдля першого стовпця, і нам потрібно створити додаткові INDEXs для інших стовпців. Я хочу знати, чи так це і для Composite Primary Key.

Відповіді:


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, тоді вам потрібні окремі індекси для кожного з них поодинці
Стівен Сенкомаго Мусоке

3
Якщо індекс на col1, col2 та col3 означає, що SELECT * FROM col1 = 10 буде ефективним, оскільки col1 є першим стовпцем в індексі, тому №3 дозволяє зробити те ж саме для col2 та col3, так що якщо ви відфільтрувати лише ці стовпці без col1, тоді стовпці також індексуються
Stephen Senkomago Musoke

2
@PaulWasilewski так, справді є спеціальні випадки, коли складений первинний ключ має сенс, але це лише окремі випадки.
Стівен Сенкомаго Мусоке
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.