Разходите за поддържане на индекс (с една колона или с няколко колони) почти винаги се компенсират от подобрението на производителността, когато този индекс се използва. Това е малка стъпка на всеки 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
е незначителен.
По-добре е всички "=" колони да са първо в индекс, а след това най-много едно друго поле. Допълнителна дискусия тук .