Я изучаю индексы и решил попробовать эксперимент с базой данных MySQL Sakila.У меня есть следующий запрос:
SELECT title, release_year
FROM film
WHERE release_year < 2010
AND rating = 'R';
Это первый индекс, который я пробовал:
CREATE INDEX idx_releaseYear ON film(rating);
Когда я запустил свой запрос, MySQL EXPLAIN вернул это:
![enter image description here](https://i.stack.imgur.com/2sZwd.png)
РЕДАКТИРОВАТЬ: Моя интерпретация этих результатов: MySQL использует индекс (отсортированный по рейтингу), чтобы быстро найти все фильмы с рейтингом «R», а затем проверяет год выпуска каждой строкивозвращается индексом.
Далее я создал индекс по рейтингу и release_year:
CREATE INDEX idx_releaseYear ON film(rating, release_year);
Когда я запустил свой запрос, MySQL EXPLAIN вернул это:
![enter image description here](https://i.stack.imgur.com/iwUQz.png)
РЕДАКТИРОВАТЬ: Мои ожидания: MySQL будет использовать индекс (отсортированный по рейтингу, затем release_year), чтобы быстро найти все R-рейтинговые фильмы и release_years <2010, и использовать толькотаблица фильмов для получения названий фильмов из строк, возвращаемых индексом.Несмотря на то, что все фильмы в базе данных имеют одинаковый release_year, я думал, что сортировка индекса по рейтингу, а затем год выпуска будет работать лучше (или, по крайней мере, так же, используя только первый столбец индекса), как первый запрос, так как в первомзапрос должен был проверить годы выпуска в случайном порядке. </p>
Почему первый индекс с одним столбцом работает лучше, чем второй индекс с несколькими столбцами?Я думал, что они будут выполнять, по крайней мере, то же самое, так как рейтинг указан первым.
Есть одна вещь, о которой вы должны знать: Все фильмы в базе данных имеют год выпуска 2006.