Оптимизация запросов MS Access SQL - PullRequest
0 голосов
/ 03 марта 2011

Получил этот уродливый кусок кода, который я хотел бы заставить работать быстрее. Это работало хорошо, пока мне не пришлось добавить метод setMotherTableValues ​​(). Как и сейчас, я выполняю этот поиск около 48 000 раз, и это убивает программу. Есть ли способ улучшить это? У меня нет полномочий изменять какие-либо столбцы в базах данных.

public void populateMdbRecognitions(ArrayList<MdbRecognition> recognitions, String genid,
        String issueid, String issueexpression, String issuedetails,
        String tablename) throws SQLException {
    ResultSet rs = statement.executeQuery("SELECT `" + genid + "`, `" + issueid + "`, `"
            + issueexpression + "`, `" + issuedetails + "` FROM " + tablename);
    while (rs.next()) {
        String gen_id = removeAmpsFromGenId(rs.getString(genid));
        String issue_id = rs.getString(issueid);
        String issue_details = rs.getString(issuedetails);
        String issue_expression = rs.getString(issueexpression);
        MdbRecognition recognition = new MdbRecognition(gen_id, issue_id,
                issue_details, issue_expression, tablename);
        recognitions.add(recognition);
    }
    for (MdbRecognition mdbRecognition : recognitions){
        setMotherTableValues(mdbRecognition);
    }

}

public void setMotherTableValues(MdbRecognition mdbRecognition) throws SQLException {
    ResultSet rs = statement.executeQuery("SELECT `mandatory?`, category, subcategory FROM __MOTHER_ISSUE_TABLE_7 WHERE issue_id ='" + mdbRecognition.getIssueId()+"'");
    while (rs.next()){
        mdbRecognition.setMandatory(rs.getString("mandatory?").trim());
        mdbRecognition.setCategory(rs.getString("category").trim());
        mdbRecognition.setSubcategory(rs.getString("subcategory").trim());
    }
}

Ответы [ 2 ]

1 голос
/ 03 марта 2011

Лучше переписать первый запрос, присоединившись к главной таблице вопросов.

1 голос
/ 03 марта 2011

Это то, что вы делаете?

  • Выберите все строки из произвольного таблица.
  • Удалить амперсанды из gen_id.
  • Сохранить каждую строку из этой произвольной таблицы в коллекции.

Затем для каждого элемента в этой коллекции

  • Выберите три столбца из __MOTHER_ISSUE_TABLE_7 от Issue_id.
  • Обновить значения в этой коллекции значениями из этих трех столбцов.

Поскольку вы говорите, что просто храните строки для обновления графического интерфейса, вам почти наверняка нужно изменить это:

ResultSet rs = statement.executeQuery("SELECT `" + genid + "`, `" + issueid + "`, `"
        + issueexpression + "`, `" + issuedetails + "` FROM " + tablename);

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

...