MySQL почти никогда не использует 2 индекса в одном запросе. (То есть оптимизатор почти никогда не выбирает «объединение индексов».)
Составной (многостолбцовый) индекс, в случае необходимости, лучше, чем два отдельных индекса.
WHERE username = '...' and country = '...' and comment = '...'
обычно получит выгоду от
INDEX(username, country, comments) -- in any order
Для этого WHERE
, INDEX(username, country, created_at, comment, status)
будет использоваться только первые два столбца. (Если это не «покрытие».)
WHERE username = '' and status = ''
Получит выгоду от любого индекса , начиная с с и username
и status
в или порядке. Он частично выиграет от составного индекса из 5 столбцов, приведенного выше - первый столбец username
. Он будет использовать status
только в том случае, если 'cover'.
Индекс «покрытия» - это индекс, который содержит все столбцы, используемые везде в запросе SELECT
. Наличие правильных столбцов в правильном порядке в INDEX
важнее, чем «покрытие».
Вот мое обсуждение о том, как создавать оптимальные индексы.