Задавайте вопросы, мы ответим
Вы не зашли.
Страниц: 1
Добрый день!
Задавал уже этот вопорс на хабре/qa. Интересно мнение гуру форума.
При выборке из таблицы необходимо доставать записи, соответствующие всем значениям немаленького такого массива (поиск в таблице не по уникальным значениям, есть повторы).
Получается, что в оператор IN загоняется около 1000 значений через запятую, но это как-то не по-спортивному)
Что посоветуете лучше по производительности?
Заранее спасибо за ответы!
Неактивен
Попробуйте вставить эти id во временную таблицу (CREATE TEMPORARY TABLE table_name SELECT id ...) и потом сделать JOIN. По производительности нужно сравнивать на конкретном примере что будет быстрее. Может потребоваться создать индекс на временной таблице.
Неактивен
А еще, верно ли я мыслю, что один запрос по индексу из таблицы на 20 млн. записей будет выполняться быстрее, чем два запроса на ту же таблицу, но с 10 млн. записей?
Решил попробовать добавить избыточность данных, это может избавить от 1000 параметров в IN.
Неактивен
Gambik написал:
А еще, верно ли я мыслю, что один запрос по индексу из таблицы на 20 млн. записей будет выполняться быстрее, чем два запроса на ту же таблицу, но с 10 млн. записей?
Обычно да, так как сложность алгоритма поиска по индексу в теории логарифмическая, а на практике степень, меньшая линейной.
С избыточностью данных нужно будет хорошо продумывать апдейты, чтобы данные не рассогласовывались (или ввести триггеры).
Неактивен
Страниц: 1