В случае MySQL можно использовать индексы с несколькими столбцами для запросов, которые проверяют все столбцы в индексе, или запросов, которые проверяют только первый столбец, первые два столбца, первые три столбца и т. Д.
Если вы укажете столбцы в правильном порядке в определении индекса, один составной индекс может ускорить несколько видов запросов к одной и той же таблице.
Допустим, у вас есть INDEX nameIdx (last_name,first_name)
созданный в таблице test
Поэтому индекс nameIdx используется для поиска в следующих запросах:
SELECT * FROM test WHERE last_name='Widenius';
SELECT * FROM test
WHERE last_name='Widenius' AND first_name='Michael';
SELECT * FROM test
WHERE last_name='Widenius'
AND (first_name='Michael' OR first_name='Monty');
где в качестве имени nameIdx не используется для поиска в следующих запросах:
SELECT * FROM test WHERE first_name='Michael';
SELECT * FROM test
WHERE last_name='Widenius' OR first_name='Michael';
для более подробной информации см. URL
Обобщение этого: если вы используете столбцы в предложении where, как указано в порядке индекса (слева направо), то это лучше, чем индекс по одному столбцу