bigton
@bigton
Web-программист

Что лучше несколько mysqli_connect() или несколько mysqli_select_db()?

Всем привет!

Я хочу уменьшить кол-во запросов к базе данных. Но боюсь, что установка нескольких соединений более ресурсоёмкий процесс, чем выбор (select) базы. Что вы думаете по этому поводу, какой путь лучше?

Первый путь
class db {

    private $link;

    function __construct() {

        $this->link = mysqli_connect('1.1.1.1', 'user', 'pass');
    }

    function query($sql, $db) {

        mysqli_select_db($this->link, $db);

        return mysqli_query($this->link, $sql);
    }
}

$db = new db();

for ($i = 0; $i < 100; $i++) {
    $db->query('SELECT * FROM `table`', 'databaseA');
    $db->query('SELECT * FROM `table`', 'databaseB');
    $db->query('SELECT * FROM `table`', 'databaseC');
}

//connections - 1
//queries - 2 x 3 x 100 = 600

Второй путь
class db {

    private $links;

    function query($sql, $db) {

        if ( ! isset($this->links[$db]))
            $this->links[$db] = mysqli_connect('1.1.1.1', 'user', 'pass', $db);

        return mysqli_query($this->links[$db], $sql);
    }
}

$db = new db();

for ($i = 0; $i < 100; $i++) {
    $db->query('SELECT * FROM `table`', 'databaseA');
    $db->query('SELECT * FROM `table`', 'databaseB');
    $db->query('SELECT * FROM `table`', 'databaseC');
}

//connections - 3
//queries - 1 x 3 x 100 = 300


Спасибо!
  • Вопрос задан
  • 301 просмотр
Пригласить эксперта
Ответы на вопрос 4
@SergeyZelensky-Rostov
тестировать надо, по времени, по ресурсам а там решите что для вас лучше
Ответ написан
Комментировать
удивительно конечно то, что приходится работать сразу с несколькими ДБ...
почему бы не использовать проще?
$db->query('SELECT * FROM `databaseA`.`table`');
Ответ написан
akubintsev
@akubintsev
Опытный backend разработчик
Если код код выполняется синхронно и в одном потоке, то смысла городить новое подключение нет.
Ответ написан
@repeat
Здесь пишут что смена БД быстрее. Вам остаётся либо поверить в это, либо использовать что больше нравится
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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