Почему TOAD быстрее, чем мой код Java? - PullRequest
1 голос
/ 20 декабря 2010

Я хочу выполнить запрос на выборку и получить счет результатов, не используя «COUNT (*)», как это делает TOAD Идея состоит в том, чтобы дать пользователю возможность ввести любой «запрос выбора», который он хочет, и подсчитать количество результатов для него.

try {
   selectStatement = globalConnection.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
   ResultSet selectResultSet = selectStatement.executeQuery(selectStatementString);
   selectResultSet.last();
   int countOfResults = selectResultSet.getRow();
   writeInLabel(kllStatusLabel, "Count Finished: Found " + countOfResults + " Inserts");
} catch (SQLException ex) {
   writeInLabel(kllStatusLabel, "Error executing select query.");
}

Этот код сильно задерживается в строке: "selectResultSet.last ();". TOAD делает это с гораздо меньшей задержкой. (Щелкните правой кнопкой мыши -> Количество записей). Даже когда я прокручиваю таблицу результатов до конца в TOAD, она делает это быстрее.

Как TOAD получает количество записей?

ОК, я понял, я буду использовать count (*) и получу второй ResultSet, чтобы показать мои результаты.

ResultSet selectResultSet = selectStatement.executeQuery("select count(*) from (" + selectStatementString + ")");
int countOfResults = 0;
if (selectResultSet.next()){
   countOfResults = selectResultSet.getInt(1);
}

Ответы [ 2 ]

1 голос
/ 20 декабря 2010

TOAD, вероятно, выбирает @@rowcount или другие метаданные результата, специфичные для БД. Если вы хотите получить размер результата, попросите об этом БД в явном виде (с COUNT())

Если вы используете mysql, тогда вы можете использовать ROW_COUNT().

0 голосов
/ 20 декабря 2010

Лучше держите COUNT() рядом с базой данных, предоставляя отдельную хранимую процедуру, содержащую исключительно select с подсчетом, и получайте доступ к этой хранимой процедуре из своего кода всякий раз, когда вам это нужно.

...