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查询,那么它就更像是一个DB问题

  • 这两张桌子看起来怎么样
  • 使用了什么索引
  • 数据看起来如何(有多少行等)

在你分析了这一点之后,你应该能够以不同的方式发布问题,并期望得到答案。我不是DB的人,但我相信有人能够提供一些指示。

必须完成以下工作:

  • 检查
    TransactionScope.getConnection()正在毫无延迟地进行连接
  • 而不是创建新的
    HashMap hashItems=newhashmap()您可以使用

    while (rs.next()){
      myList.add(rs.getString(1) + "delimiter" + rs.getString(2)); 
    }
    
  • 在jsp中使用

    first = allPOV.get(i).split("delimter")[0];
    second = allPOV.get(i).split("delimter")[1];
    
    这样您就可以减少内存

  • 如果可能,在查询中使用limit,并在段1上使用索引

  • 您可以做的一件事是在数据库中使用存储过程,这样它就可以优化和存储执行该过程的最佳方式,而无需每次都重新计算它。@Patashu,这也是一条准备好的语句所做的。这是一个需要很长时间的问题吗?如果是这样,发布代码将没有帮助,您需要查看查询是否可以优化,例如检查缺少的索引等。验证
    TransactionScope.getConnection()
    不会在每次调用时创建连接,因为它会降低方法性能。如果它正在重用一个连接/池,那么发布SQL,这样你就可以提出重构/改进itI的建议。我认为查询需要优化。因为获取结果需要时间。我已经用query编辑了这个问题。
    first = allPOV.get(i).split("delimter")[0];
    second = allPOV.get(i).split("delimter")[1];