Я бы рекомендовал прочитать Как MySQL использует индексы из Справочного руководства MySQL . В нем говорится, что индексы используются ...
- Чтобы быстро найти строки, соответствующие предложению
WHERE
.
- Чтобы исключить строки из рассмотрения.
- Для извлечения строк из других таблиц при выполнении объединений.
- Чтобы найти значение
MIN()
или MAX()
для определенного индексированного столбца.
- Сортировка или группировка таблицы (при определенных условиях).
- Для оптимизации запросов с использованием только индексов без обращения к строкам данных.
Индексы в базе данных работают как индексы в книге. Вы можете найти то, что вы ищете в книге быстрее, потому что индекс указан в алфавитном порядке. Вместо алфавитного списка MySQL использует B-деревья для организации своих индексов, что быстрее для его целей (но для человека это займет намного больше времени).
Использование большего количества индексов означает использование большего пространства (а также накладных расходов на обслуживание индекса), поэтому действительно стоит использовать индексы только для столбцов, которые удовлетворяют вышеуказанным критериям использования.
В вашем примере оба столбца id
и blog_post_id
используют индексы (PRIMARY KEY
также является индексом), чтобы приложение могло быстрее их найти. В случае id
вполне вероятно, что это позволяет пользователям быстро изменять или удалять комментарии, а в случае blog_post_id
, поэтому приложение может быстро найти все комментарии к данному сообщению.
Вы заметите, что для столбца email
нет индекса. Это означает, что поиск всех сообщений в блоге по определенному адресу электронной почты, вероятно, займет довольно много времени. Если вы хотите добавить поиск всех комментариев по определенному адресу электронной почты, возможно, имеет смысл добавить к этому также индекс.