Я столкнулся со следующим, и я не уверен, что лучше всего.Два индекса с одним столбцом против одного индекса с двумя столбцами в MySQL?
Рассмотрим следующую таблицу (которая получит большой):
ID PK | giver_id FK | recipient_id FK | date
Я использую InnoDB и, насколько я понимаю, он автоматически создает индексы для двух столбцов внешнего ключа. Тем не менее, я также буду выполнять множество запросов, где мне нужно будет соответствовать определенной комбинации:
SELECT...WHERE giver_id = x AND recipient_id = t
.
Каждая такая комбинация будет уникальной в таблице.
Есть ли какая-либо польза от добавления индекса с двумя столбцами по этим столбцам или двух теоретических теорий достаточно или одинаковых?
'MySQL может использовать только один индекс для SELECT', это уже не так, было бы неплохо, если вы отредактировали свой ответ для обновления. – Davor
Не могли бы вы объяснить, почему индекс покрытия не сможет использоваться 'recipient_id'? –
@IvoPereira Множественные индексы столбцов в MySQL позволяют использовать все поля в индексе слева направо. Например, если у вас есть 'INDEX (col1, col2, col3, col4)', тогда индекс будет применяться для поиска с предложением WHERE, например 'col1 = 'A'' или' col1 =' A 'AND col2 = 'B' 'или' col1 = 'A' AND col2 = 'B' AND col3 = 'C' AND col4 = 'D'', но этот конкретный индекс не будет использоваться ни для чего, как' WHERE col2 =' B ' 'или' WHERE col3 = 'C' AND col4 = 'D'', потому что поля поиска больше не указаны в определении индекса. Вам нужно будет добавить дополнительные индексы для охвата этих полей. – Slicktrick