Что такое составная индексация и как ее правильно использовать?

У меня очень медленный запрос, который повторяется совсем немного. Я пытался индексировать отдельные поля, но это не помогает. Загрузка ЦП все еще очень высока, и запросы по-прежнему отображаются в журнале медленных запросов. Кажется, мне нужен составной индекс?

Как правильно индексировать следующий запрос?

select *
from `to_attachments` left join
     `attachments`
     on `to_attachments`.`attachment_id` = `attachments`.`id`
where `to_attachments`.`object_type` = 'communicator' and `to_attachments`.`object_id` = '64328'
order by `attachments`.`created_at` desc;

ОБЪЯСНИТЬ Результат: 1 SIMPLE to_attachments index NULL PRIMARY 775 NULL 244384 Using where; Using index; Using temporary; Using filesort 1 SIMPLE attachments eq_ref PRIMARY PRIMARY 4 quote.to_attachments.attachment_id 1 NULL

Индекс для to_attachments введите описание изображения здесь

2 ответа

Решение

Вы хотите индексы на to_attachments(object_type, object_id, attachment_id) а также attachments(id),

Ваша последовательность индекса неправильная, она должна быть (object_type, object_id, attachment_id). В многоколоночном индексе порядок столбцов в индексе имеет значение MATTER.

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