Я играл с индексами в MySQL (5.5.24, WinXP ), но не могу найти причину, по которой сервер не использует один индекс, когда используется LIKE
.
Пример такой:
Я создал тестовую таблицу:
create table testTable (
id varchar(50) primary key,
text1 varchar(50) not null,
startDate varchar(50) not null
) ENGINE = innodb;
Затем я добавил индекс к startDate
. (Пожалуйста, не спрашивайте, почему в колонке текст, а не дата и время.. это просто проверка):
create index jeje on testTable(startdate);
analyze table testTable;
После этого я добавил почти 200 000 строк, где startDate имел 3 возможных значения. (Одна треть появлений на каждого... около 70 000 раз)
Таким образом, если я запускаю команду EXPLAIN , подобную этой:
explain select * from testTable use index (jeje) where startDate = 'aaaaaaaaa';
Ответ следующий:
id = 1
select_type = SIMPLE
type = ref
possible_keys = jeje
key = jeje
rows = 88412
extra = Using where
Итак, ключ используется, а количество строк близко к 200 000/3, так что все в порядке.
Проблема в том, что если я изменю запрос на:(просто поменяв '=' на 'LIKE'):
explain select * from testTable use index(jeje) where startDate LIKE 'aaaaaaaaa';
В этом случае ответ:
id = 1
select_type = SIMPLE
type = ALL
possible_keys = jeje
key = null
rows = 176824
extra = Using where
Таким образом, индекс сейчас не используется. Ключ (равен нулю, а строки близки к полной таблице... как предполагает type=all ).
В документации MySQL говорится, что LIKE использует индексы.
Итак, чего я здесь не вижу? В чем проблема?
Спасибо за вашу помощь.