Итак, у меня есть две таблицы с одной строкой - `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
Любые идеи?
Спасибо!
Если у вас нет достаточного количества данных (например, 2-3 строки), это не стоит того, чтобы фильтровать с помощью индекса и дополнительного поиска, чтобы получить все строки после. – ESG
Покажите нам 'EXPLAIN'; мы должны увидеть все это. –