Предположим, у меня есть эта таблица:MySQL Index + Query
create table table_a (
id int,
name varchar(25),
address varchar(25),
primary key (id)
) engine = innodb;
Когда я бегу этот вопрос:
select * from table_a where id >= 'x' and name = 'test';
Как будет обрабатывать MySQL это? Будет ли он вытащить все идентификаторы первого (предположим 1000 строк), а затем применить предложение where = test?
Или, пока он ищет идентификаторы, он уже применяет предложение where в то же время?
Я не уверен, что отдельные индексы для id и name окажут такое же влияние на производительность с наличием составного индекса. Вы уверены, что? –
@AtaS. - Это будет зависеть от оптимизатора. Он может предпочесть сделать слияние индексов, и в этом случае он будет иметь аналогичное преимущество при использовании составного индекса, но это может и не быть. - [Оптимизация слияния индексов] (http://dev.mysql.com/doc/refman/5.0/en/index-merge-optimization.html) – nnichols
Предположим, что таблица имеет несколько столбцов текста, и я все еще запускаю один и тот же запрос, то, как вы сказали, он сначала возьмет все строки, а затем применит предложение фильтра. В этом случае текстовые столбцы очень дороги для размещения внутри памяти. Это верно? – Carmen