Низкая производительность в rs.next () в результате запроса в Java - PullRequest
1 голос
/ 09 июля 2019

Я пытаюсь экспортировать результаты запроса в CSV, однако эта проблема сохраняется, даже если я не пытаюсь экспортировать в CSV. Следующий код имеет ту же логику и шаги, что и мой настоящий код, но это изменило заголовки и имена переменных, чтобы сделать его более понятным. Вот код:

            rs = statement.executeQuery(query);

            //CSV HEADER
            outputLines.add("Cow"+d+"Horse"+d+"Sheep"+newLineDelimiter);
            int number =0;
            while(rs.next())
            {
                //This was added to see the output speed in catalina.out
                System.out.println(number);
                number++;
                Farm.LoadXmlByEntry(passStatement, rs.getFarm("entry_c"), tag);

                //Declares variables as well as puts them into correct type, then escapes them as to not break the CSV format, this is a string
                String cow = String.format("%s", Farm.CowNumber());
                String horse = String.format("%s", ticket.HorseNumber());
                String sheep = String.format("%s", ticket.SheepNumber());

                //this is just a simple escaping sequence so any entered characters do not break the CSV format
                cow   = Escape.CSV(cow);
                horse = Escape.CSV(horse);
                sheep = Escape.CSV(sheep);

                outputLines.add(cow+d+horse+d+sheep+newLineDelimiter);
            }

Теперь я добавил number как выход, чтобы я мог видеть грубую скорость, с которой работает rs.next(). Результат очень медленный, когда фактический ответ на запрос очень быстрый. Вот запись в реальном времени подсчета чисел (он немного замедляется при наборе чисел, количество строк периодически 5000+):

Counting Speed

Кажется, что rs.next() вызывает проблемы с производительностью. Есть ли лучший способ приблизиться к этому, который более эффективен?

Не точный запрос, но измененный в соответствии с приведенным выше синтаксисом: «ВЫБЕРИТЕ корову, лошадь, овцу FROM Farm_Table;» В нем также есть диапазоны дат для оператора WHERE, но я не использую их, так как просто выбираю все.

Я использую Java 6, полагаю, что версия JDBC - это spring-jdbc-3.0.6, и я не установил размер выборки.

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