Есть старое правило для MySQL, которое гласит, что если на таблице наложено два ключа (a) и (a, b), то первый ключ можно снять, ибо для выборки будет достаточно второго ключа.
В статье на www.mysqlperformanceblog.com наглядно показано, что это правило верно не всегда. Дело в том, что в InnoDB особое внимание уделяется clustered index. Clustered index идёт как замыкающий элемент каждого ключа. То есть индексы надо рассматривать как (a, id) и (a,b,id). Теперь, зная это, подумаем что произойдёт с запросом
SELECT * FROM table WHERE a = 3 ORDER BY id LIMIT 1;
если мы уберём ключ (а) и оставим ключ (a,b).
Вообще статья заставила меня переосмыслить использование и оптимизацию ключей в InnoDB.
Подписаться на:
Комментарии к сообщению (Atom)
Комментариев нет:
Отправить комментарий