2

検索機能を改善するにはどうすればよいですか。何かを検索するためのコードをいくつか書きました。検索に時間がかかりすぎました。そして、ここのコードスニペットは、

この方法を使用してデータベースからデータをプルしています。、

   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");
    }

クエリ:

SELECT DISTINCT(mtl.segment1),
  mtl.description ,
  mtl.inventory_item_id ,
  mtl.attribute16
FROM mtl_system_items_b mtl,
  mtl_system_items_tl k
WHERE 1                           =1
AND mtl.organization_id           = ?
AND k.inventory_item_id           = mtl.inventory_item_id
AND NVL(orderable_on_web_flag,'N')= 'Y'
AND NVL(web_status,'UNPUBLISHED') = 'PUBLISHED'
AND mtl.SEGMENT1 LIKE ?  --Here is the search term
4

3 に答える 3

2

Organisation_id 、inventory_item_id、特にSEGMENT1がテーブルにインデックス付けされていることを確認してください。

クエリはかなり標準的です。それが機能しない場合は、DBサーバーの応答が遅いようです。これは、スペースの不足、メモリの不足、ディスク/読み取りの速度低下などのさまざまな理由が原因である可能性があります。

次に、DBA/サーバー管理者に確認を依頼できます。

于 2013-03-25T04:36:16.010 に答える
2

まず、本当の問題を見つける必要があります

  • DBクエリですか
  • それはネットワークですか(アプリとDBは同じマシン上にありますか?)

それがDBクエリであることを確認すると、それはDBの質問になります。

  • 2つのテーブルはどのように見えますか?
  • 使用されているインデックスはありますか?
  • データはどのように見えますか(行数など)

これを分析した後、別の方法で質問を投稿し、回答を期待できるようになります。私はDBの人ではありませんが、誰かがいくつかのポインタを提供できると確信しています。

于 2013-03-25T04:46:21.153 に答える
1

調整を行う必要があります。

  1. チェックTransactionScope.getConnection();は遅滞なく接続を提供しています。
  2. HashMap hashItems = new HashMap();新しいものを作成する代わりに、

    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];

メモリを減らすことができるように。

  1. 可能であれば、クエリで制限を使用し、SEGMENT1 リンクのインデックスを使用します。
于 2013-03-25T05:00:39.380 に答える