SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 01.05.2013 13:27:24

animegirl
Активист
Зарегистрирован: 28.07.2011
Сообщений: 288

Использование индексов при выборке через IN

Изучая методичку от rgbeast, задумалась над слайдом Q6 по поводу правильного использования индексов. А именно как поведёт себя MySQL при использование IN в WHERE? С одной стороны, это вроде как прямое сравнение, с другой стороны, там целый список может быть.

Гугл выдаёт противоречивые ответы sad


Скажи миру - НЯ!

Неактивен

 

#2 01.05.2013 13:32:45

animegirl
Активист
Зарегистрирован: 28.07.2011
Сообщений: 288

Re: Использование индексов при выборке через IN

Пример где я с этим столкнулась выглядит так:

... WHERE column1=var1 AND column2 IN (1,2,3,4,5...xx) AND column3>var3 ORDER BY column3

До какого действия будет использоваться индекс KEY `column1` (`column1`,`column2`) если учесть, что это innoDB с  PRIMARY KEY (`column3`) ?


Скажи миру - НЯ!

Неактивен

 

#3 01.05.2013 14:05:38

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3878

Re: Использование индексов при выборке через IN

Будет использоваться. Почему не проверите с помощью EXPLAIN?

Неактивен

 

#4 01.05.2013 14:08:15

animegirl
Активист
Зарегистрирован: 28.07.2011
Сообщений: 288

Re: Использование индексов при выборке через IN

Каюсь, не проверяла, я с ним (EXPLAIN), ещё не до конца подружилась  roll


Скажи миру - НЯ!

Неактивен

 

#5 02.05.2013 16:45:00

Shopen
Гуру
Откуда: Москва
Зарегистрирован: 22.10.2007
Сообщений: 362

Re: Использование индексов при выборке через IN

С EXPLAIN дружить несложно, нужно всего то дописать это слово перед запросом и выполнить.
IN() это тоже самое что много OR (c=1 OR c=2 OR c=3 ...) - при наличии индекса он будет использовться в обоих случаях как range (эксплейн вам это покажет).

В вашем конкретном примере напрашивается индекс UNIQUE KEY `column1` (`column1`,`column2`, `column3`), но это стоит проверить тем же explain.

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson