понедельник, 24 мая 2010 г.

Расширение индексов InnoDB может изменить производительность неожиданным образом

Есть старое правило для 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.

Комментариев нет: