Mysql -«Выбрать как» без использования индекса

Я играл с индексами в 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 использует индексы.

Итак, чего я здесь не вижу? В чем проблема?

Спасибо за вашу помощь.

9
задан Ajay Kadyan 20 August 2012 в 04:47
поделиться