Есть ли выигрыш в производительности для создания множественного индекса по первичному ключу + внешнему ключу?

Если у меня есть таблица, которая имеет первичный ключ и внешний ключ, и поиски часто выполняются с запросами, которые включают оба (...WHERE primary=n AND foreign=x)Есть ли какое-то преимущество в производительности для создания множественного индекса в MySQL с использованием двух ключей?

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

Обновление: я использую таблицы InnoDB.

1 ответ

Решение

Для сравнений на равенство вы не можете получить улучшение по сравнению с индексом первичного ключа (потому что на данный момент существует не более одной строки, которая может соответствовать).

Путь доступа будет:

  1. посмотрите на индекс первичного ключа для primary = n
  2. получить единственную подходящую строку из таблицы
  3. проверьте любые другие условия, используя строку в таблице

Составной индекс может иметь смысл, если у вас есть сканирование диапазона по первичному ключу и вы хотите сузить его до другого столбца.

Другие вопросы по тегам