SO полна обходных ситуаций, но мне интересно об исторических причинах предела 1000 для «максимального количества выражений» в разделе IN?ORA-01795 - почему максимальное количество выражений ограничено 1000
ответ
Возможно, это связано с тем, что существует потенциал злоупотребления тоннами ценностей. И каждое значение в нем будет преобразовано в эквивалентное условие ИЛИ.
Например NAME IN ('JOHN', 'CHARLES'..
) будут преобразованы в NAME = 'JOHN' OR NAME = 'CHARLES'
Итак, это мощь влияют на производительность ..
Но обратите внимание Oracle по-прежнему поддерживает
SELECT ID FROM EMP WHERE NAME IN (SELECT NAME FROM ATTENDEES)
В этом случае, оптимизатор не конвертируется в несколько условий ИЛИ, но вместо этого делает JOIN
..
Это ограничение не только для списка IN, но и в любом списке выражений. Документация говорит:
Список выражений с разделителями-запятыми может содержать не более 1000 выражений.
Ваш вопрос Почему предел . Почему не 100 или 10000 или миллион? Я предполагаю, что это связано с лимитом количества столбцов в таблице, что составляет 1000. Возможно, это отношение истинно в Oracle внутри, чтобы сделать список выражений и столбцы соответствующими выражению DML.
Но, для хорошего дизайна, предел 1000 сам по себе большой. Практически вы не достигнете предела.
И, цитата из известного сайта AskTom по аналогичной теме,
Мы потратим больше времени разбора запросов, то на самом деле их выполнения!
Update Мои собственные мысли
Я думаю, что Oracle довольно старая в технологии баз данных, что эти ограничения были сделаны, то один раз, и они никогда не приходилось думать об этом снова. Список всех выражений имеет 1000 предел. И надежный дизайн никогда не позволяет пользователям обращаться к Oracle за разъяснениями. И ответ Тома на аут-аут всегда заставляет меня думать, что все это ограничение в то время в 70-е или 80-е годы было скорее вопросом вычисления. Алгоритмы, основанные на C, возможно, необходимы некоторые ограничения и Oracle пришел ио с 1000.
Update 2: Из приложения, и это основа точки зрения
В качестве DBA, я видел так много develpers приближается ко мне с проблемами производительности, которые на самом деле являются проблемами с application framework
, генерирующим запросы для извлечения данных из базы данных. Приложение предоставляет пользователям возможность добавлять filters
, которые в конечном итоге образуют логику AND, OR
в списке запроса IN
.Внутренний Oracle расширяет его как query rewrite
на этапе optimization
как OR
логика. И запрос становится огромным, тем самым увеличивая время до PARSE
. В большинстве случаев он подавляет index usage
. Таким образом, это один из случаев, когда запрос генерируется с огромным списком IN через структуру приложения.
Все еще кажется произвольным. Мы можем добавить миллион выражений, почему мы не можем «использовать» миллион выражений? –
Да, я согласен. Возможно, потому, что Oracle довольно устарела в технологии БД, эти ограничения были сделаны тогда один раз, и им никогда не приходилось думать об этом снова. Список всех выражений имеет 1000 предел. И надежный дизайн никогда не позволяет пользователям обращаться к Oracle за разъяснениями. И ответ Тома на аут-аут всегда заставляет меня думать, что все это ограничение в то время в 70-е или 80-е годы было скорее вопросом вычисления. Для алгоритмов, основанных на C, может потребоваться некоторый предел, а Oracle - uo с 1000. –
- 1. Максимальное количество выражений в списке - 1000
- 2. java.sql.SQLSyntaxErrorException: ORA-01795: максимальное количество выражений в списке равно 1000
- 3. Исключение Java Oracle - «максимальное количество выражений в списке - 1000»
- 4. ORA-01795 максимальное количество выражений в списке 1000
- 5. Какое максимальное количество услуг ограничено ОС Android?
- 6. php Сообщение ограничено 1000 переменными
- 7. XPages ValuePicker Ограничено до 1000
- 8. Количество веб-запросов ограничено
- 9. Ограничено ли ограничение «Максимальное количество параметров запроса POST»?
- 10. Почему количество единиц текстуры ограничено в OpenGL?
- 11. Почему количество системных вызовов очень ограничено?
- 12. Максимальное количество «и» выражений в IF
- 13. Как ограничено количество просмотров?
- 14. Вызвано: java.sql.SQLException: ORA-01795: максимальное количество выражений в списке равно 1000?
- 15. Самый эффективный способ работы с ORA-01795: максимальное количество выражений в списке - 1000 в спящем режиме
- 16. «Максимальное количество выражений в списке - 1000» ошибка с Grails и Oracle
- 17. Есть ли обходной путь для ORA-01795: максимальное количество выражений в списке - 1000 ошибок?
- 18. ORA-01795: максимальное количество выражений в списке равно 1000, как разбить строку
- 19. получает исключение в HQL ORA-01795: максимальное количество выражений в списке 1000
- 20. spring-data-jpa: ORA-01795: максимальное количество выражений в списке равно 1000
- 21. Ошибка SQL: 1795, SQLState: 42000 - максимальное количество выражений в списке 1000
- 22. java.sql.SQLSyntaxErrorException: ORA-01795: максимальное количество выражений в списке равно 1000. Как можно передать строку в слоте 1000
- 23. VARCHAR2 (1000) ограничено только 100 символами
- 24. Wit.ai GET Entity Значения Ограничено до 1000?
- 25. , почему максимальное значение максимального балла QT ограничено до 99%?
- 26. Память Java/количество записей ограничено?
- 27. C# Максимальное количество потоков
- 28. Почему TypedReference.MakeTypedReference так ограничено?
- 29. Максимальное количество goroutines
- 30. Максимальное количество одновременных сеансов Neo4j
Для хорошего дизайна предел 1000 сам по себе большой. Практически вы не достигнете предела. Во всяком случае, я объяснил далее в своем ответе. –
Я бы предположил, что ответ имеет какое-то отношение к грамматике и синтаксический анализ. И, может быть, как они были реализованы 30 лет назад. Было бы неплохо увидеть теоретический ответ компьютерной науки на это! –
Можно просто спросить, почему число так высоко? –