Массовое извлечение из таблицы в спящем режиме - PullRequest
0 голосов
/ 10 июня 2011

У меня есть таблица, и из этого я получаю записи где-то около 250 000 записей, и это занимает около 25 минут, есть ли способ уменьшить время выборки. Я использую некоторый код, как показано ниже: -

query.setParameterList("studentId", StudentIdList);

Есть ли способ оптимизировать его?

Ответы [ 2 ]

4 голосов
/ 10 июня 2011

Если из командной строки SQL требуется менее 10 минут, а из Hibernate - более 25 минут, вам может потребоваться информация о пакетной обработке .В частности, вам может пригодиться сеанс без сохранения состояния (особенно если вы не выполняете много работы).Если вы действительно не выполняете много работы, вы можете использовать оператор DML (также в этом URL).

0 голосов
/ 10 июня 2011

Есть ли способ оптимизировать его?

Если вы хотите сделать это быстрее, вы можете выполнить массовый экспорт и загрузить из файла. Или просто не использовать базу данных;)

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

public static void main(String... args) throws IOException {
    File file = new File("students.csv");

    PrintWriter pw = new PrintWriter(file);
    for (int i = 0; i < 250 * 1000; i++)
        pw.println("student " + i + ", last " + i + ", email.address" + i + "@my-school.com," + i);
    pw.close();

    long start = System.nanoTime();
    BufferedReader br = new BufferedReader(new FileReader(file));
    List<Student> students = new ArrayList<Student>();
    for (String line; ((line = br.readLine()) != null);) {
        int pos = line.indexOf(',');
        int pos2 = line.indexOf(',', pos + 1);
        int pos3 = line.indexOf(',', pos2 + 1);
        students.add(new Student(line.substring(0, pos), line.substring(pos + 1, pos2), line.substring(pos2 + 1, pos3), Integer.parseInt(line.substring(pos3 + 1))));
    }
    br.close();
    long time = System.nanoTime() - start;
    System.out.printf("Time to load %,d students was %.1f ms.%n", students.size(), time / 1e6);
}

Я использовал Студент из http://introcs.cs.princeton.edu/java/32class/Student.java.html

печать

Time to load 250,000 students was 228.7 ms.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...