Очень простое самовосстановление, но индусы игнорируются? - PullRequest
0 голосов
/ 24 января 2011

Получил нубский вопрос.Скажем, я создаю следующую таблицу:

temp1

up, varchar (15)

dn, varchar (15)

и добавляю паруindeces:

create table temp1 (up varchar(15), dn varchar(15), index id1(up), index id2(dn))

После заполнения таблицы случайными данными я делаю следующее объяснение, выбираю

explain select * from temp1 as t1, temp1 as t2 where t1.up = t2.up

и получаю

+----+-------------+-------+------+---------------+------+---------+------+------+-------------+
| id | select_type | table | type | possible_keys | key  | key_len | ref  | rows | Extra       |
+----+-------------+-------+------+---------------+------+---------+------+------+-------------+
|  1 | SIMPLE      | t1    | ALL  | id1           | NULL | NULL    | NULL |    4 |             |
|  1 | SIMPLE      | t2    | ALL  | id1           | NULL | NULL    | NULL |    3 | Using where |
+----+-------------+-------+------+---------------+------+---------+------+------+-------------+

Почему нет?т оптимизатор, использующий ключи ?!Я должен упустить что-то очень простое.,.

(Я задаю этот вопрос, потому что аналогичный запрос с таблицами, которые я на самом деле использую (строки по 700 КБ), выполняется очень медленно, и я предполагаю, что это связано с Indedes).

Спасибо за помощь!

Ответы [ 2 ]

1 голос
/ 24 января 2011

Поскольку вы выбираете все строки из временного интервала t1 (и почти все из временного интервала t2) - mysql решает использовать fullscan, поскольку в этом случае он более подходит.

0 голосов
/ 24 января 2011

Поправьте меня, если я ошибаюсь, но это вернет ВСЕ значения вашей таблицы temp1.Это не поможет вам использовать какие-либо индексы, потому что вы не ищете подмножество чего-либо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...