Чтобы ответить на такие вопросы, как «Какой столбец лучше индексировать?» И «Использует ли планировщик запросов определенный индекс для выполнения запроса?», Вы можете использовать оператор EXPLAIN
,См. Превосходную статью Анализ запросов на скорость с EXPLAIN
для полного обзора использования EXPLAIN
в оптимизации запросов и схемы.
В общем, где запрос может быть оптимизированиндексируя один из нескольких столбцов, полезное правило заключается в том, чтобы индексировать столбец, который является «наиболее уникальным» или «наиболее избирательным» по всем записям;то есть индексировать столбец, который имеет наибольшее количество различных значений во всех строках.Я предполагаю, что в вашем случае столбец merchant_id
содержит наибольшее количество уникальных значений, поэтому его, вероятно, следует проиндексировать.Вы можете проверить, что выбор индекса является оптимальным, используя EXPLAIN
в запросе для всех вариантов.
Обратите внимание, что практическое правило «индексировать наиболее селективный столбец» не обязательно относится к выбору первого столбца.составного (также называемого составным или многостолбцовым) индекса.Это зависит от ваших запросов.Если, например, employee_id
является наиболее избирательным столбцом, но вам нужно выполнять запросы, подобные SELECT * FROM badges WHERE flag = 17
, то наличие единственного индекса в таблице badges
составного индекса (employee_id, flag)
будет означать, что запрос приведет кполное сканирование таблицы.