Сокращение операций ввода-вывода базы данных - PullRequest
0 голосов
/ 06 октября 2010

Правильно ли я считаю, что для базы данных с n ПОЛЬЗОВАТЕЛЯМИ следующий код приводит как минимум к n взаимодействиям с базой данных?

Statement stmt = con.createStatement();
ResultSet srs = stmt.executeQuery(
    "SELECT FAVOURITE_COLOR FROM USERS");
while (srs.next()) {
        //performSomeAction on srs.getString("FAVOURITE_COLOR");
}

Будет ли тогда возможно извлечь FAVOURITE_COLOR из всех пользователей при 1 взаимодействии ввода-вывода с базой данных? И если это так, это может вызвать переполнение памяти в программе, если слишком много пользователей?

Ответы [ 2 ]

2 голосов
/ 06 октября 2010

Ваш пример кода выполняет однократное обращение к базе данных.

В простой реализации executeQuery будет ожидать получения всего набора данных из базы данных.Затем каждый вызов next будет немедленно переходить к следующему ряду.

1 голос
/ 06 октября 2010

Почему вы не можете сразу получить все любимые записи цветов?

ResultSet srs = stmt.executeQuery(
    "SELECT USERID, FAVOURITE_COLOR FROM USERS");

На самом деле после дальнейших размышлений это зависит от платформы и / или СУБД, о которой вы говорите. Возможно, вам придется дать больше информации для интеллектуального ответа. Некоторые платформы получат все строки за раз и позволят вам циклически проходить по ним, некоторые будут тянуть строки только при переходе к ним.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...