SQLinfo.ru - Все о MySQL Webew.ru: теория и практика веб-технологий

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

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

Вы не зашли.

#1 07.08.2012 22:41:35

Gambik
Участник
Зарегистрирован: 07.08.2012
Сообщений: 2

Больше 1000 параметров в операторе IN. Как быть?

Добрый день!

Задавал уже этот вопорс на хабре/qa. Интересно мнение гуру форума.

При выборке из таблицы необходимо доставать записи, соответствующие всем значениям немаленького такого массива (поиск в таблице не по уникальным значениям, есть повторы).
Получается, что в оператор IN загоняется около 1000 значений через запятую, но это как-то не по-спортивному)
Что посоветуете лучше по производительности?

Заранее спасибо за ответы!

Неактивен

 

#2 08.08.2012 00:20:11

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

Re: Больше 1000 параметров в операторе IN. Как быть?

Попробуйте вставить эти id во временную таблицу (CREATE TEMPORARY TABLE table_name SELECT id ...) и потом сделать JOIN. По производительности нужно сравнивать на конкретном примере что будет быстрее. Может потребоваться создать индекс на временной таблице.

Неактивен

 

#3 08.08.2012 12:43:47

Gambik
Участник
Зарегистрирован: 07.08.2012
Сообщений: 2

Re: Больше 1000 параметров в операторе IN. Как быть?

А еще, верно ли я мыслю, что один запрос по индексу из таблицы на 20 млн. записей будет выполняться быстрее, чем два запроса на ту же таблицу, но с 10 млн. записей?

Решил попробовать добавить избыточность данных, это может избавить от 1000 параметров в IN.

Неактивен

 

#4 08.08.2012 20:01:42

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

Re: Больше 1000 параметров в операторе IN. Как быть?

Gambik написал:

А еще, верно ли я мыслю, что один запрос по индексу из таблицы на 20 млн. записей будет выполняться быстрее, чем два запроса на ту же таблицу, но с 10 млн. записей?

Обычно да, так как сложность алгоритма поиска по индексу в теории логарифмическая, а на практике степень, меньшая линейной.

С избыточностью данных нужно будет хорошо продумывать апдейты, чтобы данные не рассогласовывались (или ввести триггеры).

Неактивен

 

Board footer

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