Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Оператор IN криво реализован или так и должно быть?
 
 автор: talka   (06.07.2009 в 15:44)   письмо автору
 
 

Запрос:

SELECT id FROM tbl WHERE id IN($List);

выполняется в разы медленнее, чем:

SELECT id FROM tbl WHERE id=$var1 OR id=$var2 ... OR id=$var10000;

Просто интересно. MySQL 5.0.45

  Ответить  
 
 автор: Ильдар   (07.07.2009 в 06:36)   письмо автору
 
   для: talka   (06.07.2009 в 15:44)
 

у поля `id` выставлен индекс или первичный ключ?

  Ответить  
 
 автор: talka   (07.07.2009 в 17:33)   письмо автору
 
   для: Ильдар   (07.07.2009 в 06:36)
 

>у поля `id` выставлен индекс или первичный ключ?
да.
При этом, если `id` int(11), то IN() работает, как и положено, быстрее OR ... OR,
а вот если `id` char(11), то, при прочих равных условиях, почему-то быстрее отрабатывает OR ... OR

P.S. в первом посте опечатка в "SELECT id FROM". Естественно спрашиваем не только то поле, по которому осуществляется поиск (id). Но сути не меняет.

  Ответить  
 
 автор: Евгений Петров   (08.07.2009 в 00:49)   письмо автору
 
   для: talka   (07.07.2009 в 17:33)
 

Какие значения $List и $var1, $var2, ...?
Возможно дело вот в чем. Насколько мне не изменяет память если id INT (11) то такое выражение не будет использовать индекс даже если он есть
id IN ('1', '2', '3')

а так будет
id IN (1, 2, 3)

аналогично с OR
индекс не используется
id = '1' OR id = '2' OR id = '3'

индекс используется
id = 1 OR id = 2 OR id = 3

  Ответить  
 
 автор: Trianon   (08.07.2009 в 00:57)   письмо автору
 
   для: Евгений Петров   (08.07.2009 в 00:49)
 

независимо от типа поля?
Очень хочется пруфлинк...

  Ответить  
 
 автор: talka   (08.07.2009 в 14:19)   письмо автору
 
   для: Евгений Петров   (08.07.2009 в 00:49)
 

>Какие значения $List и $var1, $var2, ...?
если char(11), то
id IN('1', '2', '3')

если int(11), то
id IN(1, 2, 3)

аналогично с OR

  Ответить  
 
 автор: .   (08.07.2009 в 17:02)
 
   для: talka   (08.07.2009 в 14:19)
 

Вас спросили конкретно: в том случае, когда у Вас обнаружилась эта проблема какие значения стояли? А то невольно хочется спросить: а может в одном случае (с IN (...) ) Вы делали запрос к таблице с char-полем, а в другом (с OR) к таблице с int-полем.

  Ответить  
 
 автор: Евгений Петров   (09.07.2009 в 01:08)   письмо автору
 
   для: talka   (06.07.2009 в 15:44)
 

А вообще чего вы мучаетесь? Сделайте EXPLAIN обоих запросов и давайте сюда. Будем разбираться.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования