Есть ли выигрыш в производительности при создании множественного индекса для первичного ключа + внешнего ключа? - PullRequest
2 голосов
/ 26 сентября 2011

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

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

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

1 Ответ

2 голосов
/ 26 сентября 2011

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

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

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

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

...