hsqldb очень медленно работает с SELECT * FROM [таблица] - PullRequest
1 голос
/ 06 апреля 2011

Я пытаюсь запустить встроенную версию hsqldb, и она отлично работает с включенным инструментом, они не медленные или что-то в этом роде.

Но когда я пытаюсь использовать следующий код для получения 20 строк, до того, как будут напечатаны все результаты, уходит до 10 секунд

Class.forName("org.hsqldb.jdbcDriver");
Connection conn = DriverManager.getConnection("jdbc:hsqldb:hsql://127.0.0.1/woopwoop", "SA", "");

Statement st = conn.createStatement(); 

ResultSet rs = st.executeQuery("SELECT * FROM ttris_users");

while(rs.next())
{
    output += "<tr>";

    output += "<td>" + rs.getString("id") + "</td>";
    output += "<td>" + rs.getString("name") + "</td>";
    output += "<td>" + rs.getString("password") + "</td>";
    output += "<td>" + rs.getString("email") + "</td>";
    //name, password, email

    output += "</tr>";
}

Я инициализирую сервер очень простым способом, и, возможно, поэтому он работает медленно, как я могу его оптимизировать?

org.hsqldb.server.Server server = new org.hsqldb.server.Server();
server.setDatabaseName(1, "woopwoop");
server.setDatabasePath(1, "C:\\ttris\\db\\");
server.start();

В журнале, который печатается в консоли, отображается запрос 27 раз

[Изменить] вот первые записи в журнале

[Server@1050e1f]: [Thread[HSQLDB Server @1050e1f,5,main]]: handleConnection(Socket[addr=/127.0.0.1,port=37523,localport=9001]) entered
[Server@1050e1f]: [Thread[HSQLDB Server @1050e1f,5,main]]: handleConnection() exited
[Server@1050e1f]: [Thread[HSQLDB Connection @3e0ebb,5,HSQLDB Connections @1050e1f]]: 0:Trying to connect user 'SA' to DB (woopwoop)
[Server@1050e1f]: [Thread[HSQLDB Connection @3e0ebb,5,HSQLDB Connections @1050e1f]]: 0:Connected user 'SA'
[Server@1050e1f]: 0:SELECT * FROM ttris_users
[Server@1050e1f]: [Thread[HSQLDB Server @1050e1f,5,main]]: handleConnection(Socket[addr=/127.0.0.1,port=37524,localport=9001]) entered
[Server@1050e1f]: [Thread[HSQLDB Server @1050e1f,5,main]]: handleConnection() exited
[Server@1050e1f]: [Thread[HSQLDB Connection @76fba0,5,HSQLDB Connections @1050e1f]]: 1:Trying to connect user 'SA' to DB (woopwoop)
[Server@1050e1f]: [Thread[HSQLDB Connection @76fba0,5,HSQLDB Connections @1050e1f]]: 1:Connected user 'SA'
[Server@1050e1f]: 1:SELECT * FROM ttris_users
[Server@1050e1f]: [Thread[HSQLDB Server @1050e1f,5,main]]: handleConnection(Socket[addr=/127.0.0.1,port=37525,localport=9001]) entered
[Server@1050e1f]: [Thread[HSQLDB Server @1050e1f,5,main]]: handleConnection() exited
[Server@1050e1f]: [Thread[HSQLDB Connection @16dadf9,5,HSQLDB Connections @1050e1f]]: 2:Trying to connect user 'SA' to DB (woopwoop)
[Server@1050e1f]: [Thread[HSQLDB Connection @16dadf9,5,HSQLDB Connections @1050e1f]]: 2:Connected user 'SA'
[Server@1050e1f]: 2:SELECT * FROM ttris_users

Проблема была обнаружена в сервлете, который использовал данные, и теперь решена

Ответы [ 2 ]

2 голосов
/ 06 апреля 2011

Что-то здесь не так.Я не думаю, что вы даете нам весь код, который нам необходим для выявления проблемы.

Если в вашем журнале показан запрос, выполняющийся 27 раз, то это проблема.Узнайте почему.Код, который вы вставили, не содержит цикл, который вызвал бы это.Поэтому я должен предположить, что код, который является причиной этого, был исключен из примера, который вы нам дали.

Добавьте дополнительные записи в журнал и проследите выполнение вашей программы.Узнайте, где и почему это зацикливание 27 раз.Информация, которую вы нам предоставляете, не указывает на это.

Также вы говорите, что используете этот код для получения 20 таблиц.Вы имеете в виду 20 записей / строк?Я вижу запрос только из одной таблицы: ttris_users.

1 голос
/ 06 апреля 2011

Странно показывать запрос 27 раз;Вы уверены, что этот код не будет вызываться более одного раза?

Что касается ускорения этого процесса: будет большое количество копирования строк, настолько, что оно будетоказывают значительное влияние на производительность.Попробуйте использовать вызовы StringBuilder и append ():

output.append("<td>").append(rs.getString("id")).append("</td>");
...