Разходите за поддържане на индекс (с една колона или с няколко колони) почти винаги се компенсират от подобрението на производителността, когато този индекс се използва. Това е малка стъпка на всеки INSERT /DELETE , плюс цена, ако промените стойността на индексирано поле чрез UPDATE . (UPDATE случаят е рядък.) Така че не се притеснявайте за разходите за „поддържане на съставен индекс“.
WHERE `vehicles`.`type` IN ('Car')
AND `vehicles`.`user_id` = 10
изисква INDEX(user_id, type) .
Оптимизаторът ще
- открийте, че този индекс е възможен кандидат,
- проверете някои статистики, тогава
- или използвайте индекса, или решете, че кардиналността е лоша и просто сканирайте таблицата.
Включете индекса; не се тревожи за това.
Подредих полетата по този начин, а не (type, user_id) въз основа на вашия IN , което означава, че понякога може да имате множество стойности за type .
Ако всички редове в таблицата имат type = 'Car' , няма проблем. Всичко, което казах, все още е в сила. Загубата на включване на ненужния type е незначителен.
По-добре е всички "=" колони да са първо в индекс, а след това най-много едно друго поле. Допълнителна дискусия тук .