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