Дисплей отображает и сохраняет все в памяти (сеанс). Hibernate также делает это. Вы не хотите, чтобы содержимое всей таблицы БД было сразу в памяти (однако, если замедление уже начинается с 2500 строк, это больше похоже на проблему плохо оптимизированной таблицы SQL-запросов/БД, 2500 строк должны быть арахисами для достойная БД, но хорошо, это еще одна история).
Скорее создайте HTML-таблицу самостоятельно с небольшой помощью JSTLc:forEach
и выстрелом EL. Сохраняйте один или два параметра запроса в фоновом режиме в input type="hidden"
: первая строка, которая будет отображаться (firstrow
), и в конечном итоге количество строк, которое будет отображаться сразу (rowcount
).
Затем в вашем классе DAO просто выполните SELECT stuff FROM data LIMIT firstrow OFFSET rowcount
или что-то в этом духе в зависимости от используемой БД. В MySQL и PostgreSQL вы можете использовать предложение LIMIT
и/или OFFSET
. В Oracle вам нужно запустить подзапрос. В MSSQL и DB2 вам нужно создать SP. Вы можете сделать это с помощью HQL.
Затем, чтобы просмотреть страницу через стол, просто используйте кнопки сгустка, которые инструктируют код на стороне сервера, чтобы в/уменьшать firstrow
с rowcount
каждый раз. Просто делайте математику.
Редактировать: вы отметили, что используете DB2. Я сделал немного исследований, и кажется, что вы можете использовать функцию UDB OLAP ROW_NUMBER()
для этого:
SELECT id, colA, colB, colC
FROM (
SELECT
ROW_NUMBER() OVER (ORDER BY id) AS row, id, colA, colB, colC
FROM
data
) AS temp_data
WHERE
row BETWEEN 1 AND 10;
Этот пример должен возвращать первые 10 строк из data
таблицы. Вы можете параметризовать этот запрос, чтобы его можно было повторно использовать для каждой страницы. Это более эффективно, чем запрос всей таблицы в памяти Java. Также убедитесь, что таблица правильно проиндексирована.
это НЕ нормально. дать более подробную информацию о вашей конфигурации, настройке, сетевом контексте и т. д. – Bozho
Я запрашиваю базу данных DB2 с большим объемом данных. Конфигурация - портлеты JSR-168, которые используют Spring 2.5.6 для моих DAO. Запрос очень сложный и включает некоторые исключения и IN (Selects ..) Сервер и Db находятся на одной машине – onigunn
Как выполняется запрос в SQL-клиенте? –