Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
msaccesssql查询优化_Sql_Ms Access_Optimization_Query Optimization - Fatal编程技术网

msaccesssql查询优化

msaccesssql查询优化,sql,ms-access,optimization,query-optimization,Sql,Ms Access,Optimization,Query Optimization,有一段丑陋的代码,我想让它运行得更快。在我不得不添加setMotherTableValues()方法之前,它工作正常。现在,我正在进行大约48000次的母表查找,它正在扼杀程序。有什么办法可以改进这一点吗? 我无权更改数据库中的任何列 public void populateMdbRecognitions(ArrayList<MdbRecognition> recognitions, String genid, String issueid, String issue

有一段丑陋的代码,我想让它运行得更快。在我不得不添加setMotherTableValues()方法之前,它工作正常。现在,我正在进行大约48000次的母表查找,它正在扼杀程序。有什么办法可以改进这一点吗? 我无权更改数据库中的任何列

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());
    }
}
public void populateMdbRecognitions(数组列表识别、字符串genid、,
字符串issueid、字符串issueexpression、字符串issuedetails、,
字符串(tablename)引发SQLException{
ResultSet rs=statement.executeQuery(“选择”`+genid+“`,`+issueid+”`,`”
+issueexpression+“`,`+issuedetails+“`FROM”+表名);
while(rs.next()){
String gen_id=removeampromgenid(rs.getString(genid));
字符串issue_id=rs.getString(issueid);
String issue_details=rs.getString(issuedetails);
String issue_expression=rs.getString(issueexpression);
MdbRecognition recognition=新MdbRecognition(gen\u id、issue\u id、,
问题详细信息、问题表达式、表名);
认可。添加(认可);
}
对于(MDB认知MDB认知:认知){
SetMotherTableValue(mdbRecognition);
}
}
public void setMotherTableValues(MdbRecognition MdbRecognition)引发SQLException{
ResultSet rs=statement.executeQuery(“选择'mandatory',类别,子类别,从'uuuu MOTHER'u ISSUE'表'u 7,其中ISSUE'u id='”+mdbRecognition.getIssueId()+“”);
while(rs.next()){
mdbRecognition.setMandatory(rs.getString(“mandatory?”).trim());
mdbRecognition.setCategory(rs.getString(“category”).trim();
mdbRecognition.setSubcategory(rs.getString(“子类别”).trim();
}
}

这就是你在做的吗

  • 从任意列表中选择所有行 桌子
  • 从gen_id中删除符号
  • 保存集合中任意表中的每一行
然后,对于该集合中的每个项目

  • 从中选择三列 __按问题id列出的母亲问题表7
  • 使用这三列中的值更新该集合中的值
既然您说您只是存储字符串来更新GUI,那么您几乎肯定需要更改:

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

返回mdbrecognition对象完成其工作所需的内容。如果这样做,您应该会看到惊人的加速。

最好重写第一个查询,加入那里的母亲问题表。

谢谢您的回复。你说对了我想做的,谢谢你说得更清楚。我不想更新数据库中的任何字段,只需获取值并将其添加到集合中即可。话虽如此,如果您希望非常欢迎您给我举一些具体的例子,我将阅读一些关于SQL更新语句的内容。@Emil:我只是在猜测更新;你是唯一一个知道mdbRecognition对象的用途的人。哦,对了,很抱歉这么不清楚。mdbRecognition对象仅用于存储要在GUI中显示的一组字符串值。因此,我需要做的是获取字符串,并将这些字符串用作mdbRecognition setMethods上的参数。母亲问题表7.问题id是否已编制索引?