Звучит в основном правильно. Вы должны знать, что вы не можете использовать два разных индекса для одной и той же таблицы в одном запросе, поэтому если вы запустили
CREATE INDEX `zip` ON `profile` (`zip`);
CREATE INDEX `intrestCode` ON `profile` (`intrestCode`);
тогда запрос
SELECT `blah`,`blah`... FROM profile WHERE zip=? && intrestCode=?
может искать только одну таблицу из индекса. Секрет в том, что вы можете создать один индекс для двух таблиц, например:
CREATE INDEX `zip+intrestCode` ON `profile` (`zip`, `intrestCode`);
MySQL может использовать это для запросов, которые используют либо zip
отдельно в предложении WHERE, либо оба zip
и intrestCode
, но не для запросов, которые используют только intrestCode
в предложении WHERE.
(Это потому, что каждый индекс покрывает всю таблицу. Если бы MySQL попытался найти zip
и intrestCode
из разных таблиц, то он извлек бы множество ненужных строк из второго индекса. Следовательно, он смотрит только на один индекс. Если вы хотите, чтобы он использовал индекс для обоих столбцов, необходимо иметь один индекс, который включает оба столбца.)