Java 改进搜索功能
如何改进搜索功能。?我写了一些代码来搜索一些东西。搜索时间太长了。这里的代码片段 我正在使用此方法从数据库中提取数据Java 改进搜索功能,java,sql,performance,jsp,search,Java,Sql,Performance,Jsp,Search,如何改进搜索功能。?我写了一些代码来搜索一些东西。搜索时间太长了。这里的代码片段 我正在使用此方法从数据库中提取数据 OracleConnection connection = null; OraclePreparedStatement ptmst = null; OracleResultSet rs = null; OracleCallableStatement cstmt = null; StringBuffer strBfr = new StringBuffe
OracleConnection connection = null;
OraclePreparedStatement ptmst = null;
OracleResultSet rs = null;
OracleCallableStatement cstmt = null;
StringBuffer strBfr = new StringBuffer();
ArrayList myList = new ArrayList();
try
{
connection = (OracleConnection) TransactionScope.getConnection();
strBfr.append("select distinct .......... ");
ptmst = (OraclePreparedStatement)connection.prepareStatement(strBfr.toString());
rs = (OracleResultSet)ptmst.executeQuery();
while (rs.next())
{
HashMap hashItems = new HashMap();
hashItems.put("first",rs.getString(1));
hashItems.put("second",rs.getString(2));
myList.add(hashItems);
}
}
catch (Exception e) {
}
finally {
try {
if (ptmst != null) {
ptmst.close();
}
} catch (Exception e) {
}
try {
if (connection != null) {
TransactionScope.releaseConnection(connection);
}
} catch (Exception e) {
}
}
return myList;
在我的jsp中:
ArrayList getValues = new ArrayList();
getValues = //calling Method here.
for(int i=0; i < getValues.size();i++)
{
HashMap quoteSrch=(HashMap)allPOV.get(i);
first = (String)quoteSrch.get("first");
second = (String)quoteSrch.get("second");
}
确保在您的表中索引了组织id、库存项目id,尤其是分段1 您的查询是相当标准的,如果不起作用,那么您的DB服务器似乎响应缓慢,这可能是由于一些原因造成的,如空间不足、内存不足、磁盘/读取速度慢等
然后,您可以要求DBA/服务器管理员进行检查。首先,您需要找出真正的问题
- 是数据库查询吗
- 是网络(应用程序和数据库是否位于同一台机器上?)
- 这两张桌子看起来怎么样
- 使用了什么索引
- 数据看起来如何(有多少行等)
在你分析了这一点之后,你应该能够以不同的方式发布问题,并期望得到答案。我不是DB的人,但我相信有人能够提供一些指示。必须完成以下工作:
TransactionScope.getConnection()代码>正在毫无延迟地进行连接
HashMap hashItems=newhashmap()代码>您可以使用
while (rs.next()){
myList.add(rs.getString(1) + "delimiter" + rs.getString(2));
}
first = allPOV.get(i).split("delimter")[0];
second = allPOV.get(i).split("delimter")[1];
这样您就可以减少内存
您可以做的一件事是在数据库中使用存储过程,这样它就可以优化和存储执行该过程的最佳方式,而无需每次都重新计算它。@Patashu,这也是一条准备好的语句所做的。这是一个需要很长时间的问题吗?如果是这样,发布代码将没有帮助,您需要查看查询是否可以优化,例如检查缺少的索引等。验证
TransactionScope.getConnection()
不会在每次调用时创建连接,因为它会降低方法性能。如果它正在重用一个连接/池,那么发布SQL,这样你就可以提出重构/改进itI的建议。我认为查询需要优化。因为获取结果需要时间。我已经用query编辑了这个问题。
first = allPOV.get(i).split("delimter")[0];
second = allPOV.get(i).split("delimter")[1];