В mysql или пост-ГРЭС, там предел размеру В (1,2, n) оператор?

У меня есть довольно много SQL-операторов как такой:

SELECT foo FROM things WHERE user_id IN (1,2,3..n)

Существует ли известный предел числу элементов, которое безопасно впишется В пункте как этот?

8
задан Kyle 11 March 2010 в 15:41
поделиться

5 ответов

Технических ограничений нет, но есть своего рода предел здравого смысла.

Слишком много элементов в предложении IN означает запрос, вероятно, имеет плохой дизайн (imho)

4
ответ дан 5 December 2019 в 10:02
поделиться

Нет, но будьте осторожны при использовании оператора IN. используйте подзапрос в своем операторе IN, это может отрицательно сказаться на производительности, поскольку SQL Server должен сгенерировать весь набор результатов и, по сути, построить потенциально большой оператор IF внутри.

Например, что-то вроде Select * From MyTable, где MyColumn IN (Выберите myColumn из AnotherTable) может быть несколько медленным, если подзапрос возвращает большое количество строк. Часто более эффективно использовать EXISTS.

0
ответ дан 5 December 2019 в 10:02
поделиться

Предел 1000 в PostgreSQL не является жестким пределом, это предел оптимизации, т.е. после 1000 PostgreSQL не очень хорошо с этим справляется. Конечно, я должен спросить, что, черт возьми, вы делаете с предложением 1000 входов IN.

7
ответ дан 5 December 2019 в 10:02
поделиться

Я почти уверен, что Postgres имеет ограничение в 1000 .... не могу найти никакой документации, чтобы поддержать это.

0
ответ дан 5 December 2019 в 10:02
поделиться

Я использовал его в динамических запросах, созданных для postgres с помощью sqlalchemy, с более чем 25k параметрами. Кроме того, они были переданы функциям Python через позиционные параметры (* args) .... но я не заметил замедления в моем случае. YMMV

2
ответ дан 5 December 2019 в 10:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: