[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Помогите понять EXPLAIN
GET
Привет.

Есть простая таблица id/varchar(50) с уникальным индексом по varchar.

Когда делаю 1 запрос:

EXPLAIN
SELECT
`id`
FROM `tab`
WHERE `name` IN ('test1')


EXPLAIN показывает, что обрабатывает 1 строку, как и должно быть, т.е. находит ее по уникальному индексу и выводит id.

Когда делаю 2 запрос:

EXPLAIN
SELECT
`id`
FROM `tab`
WHERE `name` IN ('test1','test2')


EXPLAIN показывает, что обрабатывает все строки! Почему так, почему не прыгает два раза по индексу, почему все их читает?

Я так понял тут надо два простых запроса делать типа 1 и объединять UNION. Правильно ли понял.

_____________
Не тот велик, кто не падал, а тот кто падал и поднимался.
glock18
Сколько строк в таблице всего?
GET
glock18
6

но искомые строки на 2 и на 5

_____________
Не тот велик, кто не падал, а тот кто падал и поднимался.
glock18
В таком случае MySQL может решить, что использование индекса только замедлит запрос, поскольку ему нужны данные из самой таблицы, а не из этого индекса. Если добавить еще строк 1000, то должно быть все так, как ожидаете.
GET
glock18

Спасибо...точно ведь читал об только вчера...smile.gif

_____________
Не тот велик, кто не падал, а тот кто падал и поднимался.
mmsgold
Цитата
EXPLAIN показывает, что обрабатывает 1 строку, как и должно быть, т.е. находит ее по уникальному индексу и выводит id.


Цитата
находит ее по уникальному индексу


а разве не по этому находит?

Цитата
WHERE `name` IN ('test1')


по имени
killer8080
Цитата (mmsgold @ 27.05.2013 - 13:58)
а разве не по этому находит?

Цитата WHERE `name` IN ('test1')

по имени

у него индекс по полю `name` есть.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.