Это хорошая идея?
Нет, но не по причинам, указанным Люком.Реальность такова, что ADODB все равно будет кэшировать соединения, поэтому открытие и закрытие соединений не так уж и дорого.Однако вопрос исходит из неверной информации, которую вы, по-видимому, имеете о поведении набора записей ...
От вашего комментария к Луки ответ: -
Но это правильно,что он сохраняет все данные в переменной при выполнении?
Нет, если вы тщательно не сконфигурировали возвращение набора записей как статический курсор на стороне клиента, и даже тогда вам нужно будет убедиться, что курсорполностью заполнен.Только тогда вы можете отключить набор записей от соединения и при этом продолжать использовать данные в наборе записей.
По умолчанию подключение к серверу SQL обеспечивает простой набор «пожарных шлангов» (это даже не совсемкурсор) данные доставляются необработанными из запроса, только небольшая буферизация происходит из входящих записей, и вы не можете перемещаться назад.
Самый эффективный способ минимизировать время, необходимое для подключения - использовать метод ADODB Recordset GetRows
.Это высосет все строки в двумерный массив вариантов.Получив этот массив, вы можете обойтись без набора записей и соединения.
Многое еще сделано для минимизации количества соединений, поддерживаемых на сервере, но в действительности на современном оборудовании, которое не является реальной проблемой большинства приложений,Реальная проблема заключается в том, сколько времени текущий запрос поддерживает блокировки в БД.Быстро потребляя и закрывая набор записей, вы сводите к минимуму время удержания блокировок.
Хотя следует предостеречь.Компромисс - повышенный спрос на память на веб-сервере.Вы должны быть осторожны, вы не просто перемещаете одно узкое место в другое.Тем не менее, есть много вещей, которые вы можете сделать с этим.Используйте 64-битную операционную систему и загрузите в нее много памяти или масштабируйте веб-серверы до фермы.