Если ваш код чувствителен к производительности, то предпочтительным методом будет использование какой-либо формы пула соединений и / или постоянных процессов, чтобы вы могли открыть одно соединение с базой данных и затем использовать это соединение для обслуживания множества запросов страниц, а не открытие нового соединения для каждого запроса, который ему нужен.
Если ваш код не чувствителен к производительности, то это все равно не имеет значения.
В любом случае, точные сроки обращения к базе данных в ходе обработки конкретного запроса не так уж велики, чтобы вызывать беспокойство.
Моя личная практика - открывать соединение с базой данных сразу же, когда создается новый процесс-обработчик, а затем проверять, что оно еще живо, когда я начинаю обрабатывать каждый запрос. Остальная часть кода тогда может просто предполагать, что соединение доступно, когда это необходимо, без затрат на соединение, пока пользователь ожидает ответа.