2015-05-31 4 views
1

Итак, у меня есть две таблицы с одной строкой - `type`. Эта строка является KEY в обеих таблицах, а тип одинаковый в обеих таблицах - VARCHAR(4). Проблема заключается в том, что когда я ПРИСОЕДИНИСЬ к таблицам, использующим этот столбец, EXPLAIN делает это так, что этот столбец не используется как КЛЮЧ.пытается выяснить, почему индекс не используется

Мои схемы + данные:

CREATE TABLE demo (
    id INT AUTO_INCREMENT, 
    `type` VARCHAR(4), 
    data VARCHAR(255), 
    PRIMARY KEY (id), 
    KEY `type` (`type`) 
); 

CREATE TABLE types (
    id INT AUTO_INCREMENT, 
    `type` VARCHAR(4), 
    `desc` VARCHAR(255), 
    PRIMARY KEY (id), 
    KEY `type` (`type`) 
); 

INSERT INTO demo (type, data) VALUES ('AAAA','aaaa'),('AAAA','aaaa'),('BBBB', 'bbbb'); 
INSERT INTO types (type, `desc`) VALUES ('AAA','aaaa'),('BBBB','bbbb'); 

Мой запрос:

EXPLAIN SELECT * 
FROM demo d 
JOIN types t ON d.`type` = t.`type`; 

согласно EXPLAIN запрос не поиск через 3х строк (3 * 1) - это приходится искать через 6х строк (3 * 2). Мне кажется, что он должен искать 3х строк?

SQL скрипку:

http://sqlfiddle.com/#!9/d6b69d/2

Любые идеи?

Спасибо!

+1

Если у вас нет достаточного количества данных (например, 2-3 строки), это не стоит того, чтобы фильтровать с помощью индекса и дополнительного поиска, чтобы получить все строки после. – ESG

+0

Покажите нам 'EXPLAIN'; мы должны увидеть все это. –

ответ

-1

Я едва переименовал несколько столбцов и имена таблиц, не связанных с ответом ниже. Сначала вы получили результаты. Следующие решить это

analyze table demo; 

- статус OK

analyze table thetypes; 

- статус Ok

- так статистические таблицы/индекса теперь обновленный

- примечание в таблице блокировкой чтения уровень на страницах руководства для анализа таблицы

explain select * 
from demo d 
force index (thetype) 
join thetypes t 
force index (thetype) 
on t.thetype=d.thetype 

- и будет как результаты

- примечание verbeage об индексной подсказке использовать/силы в руководстве, подкачиваемые

так ли вы используете 6 строк или 6 миллионов загляните

Чтобы получить индекс имена, если не очевидны, запустить что-то вроде

показать индекс из demo;

Да я назвал столбцы thetype и не тип

Смежные вопросы