Как правило, в многоколоночном индексе вы хотите, чтобы столбцы с наивысшей кардинальностью или, другими словами, с наибольшим числом различных значений, были первыми в индексе.
Чтобы быть более точным, сначала нужно, чтобы столбец с наименьшим количеством соответствий соответствовал вашим критериям поиска, чтобы вы могли максимально сузить набор результатов, но в целом он соответствует наивысшему количеству элементов.
Итак, в вашем примере вы захотите, чтобы столбец с миллионами различных значений находился в индексе перед столбцом с только 6 различными значениями.
Предполагая, что вы выбираете только одну строку из миллионов значений, это позволяет быстрее удалять больше строк.
При рассмотрении двух столбцов с одинаковым количеством элементов сначала поместите меньший столбец (столбцы INTEGER перед столбцами VARCHAR), поскольку MySQL может сравнивать и выполнять их итерацию быстрее.
Одно предостережение заключается в том, что если вы выбираете с диапазонами (например, WHERE datecol > NOW()
), то вы хотите, чтобы столбцы диапазонов были самыми дальними справа, а ваши столбцы - с одной константой (например, WHERE id = 1
) слева. Это связано с тем, что ваш индекс может использоваться только для поиска и упорядочения до точки первого значения диапазона.