[英]Improve the search functionality
如何改善搜索功能。 我已經寫了一些代碼來搜索某些東西,搜索花費了太多時間。 這里的代碼段
我正在使用這種方法從數據庫中提取數據。
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
確保在表中索引了organization_id,inventory_item_id,尤其是SEGMENT1 。
您的查詢是非常標准的,如果不起作用,則您的數據庫服務器似乎響應緩慢,這可能是由於空間不足,內存不足,磁盤/讀取速度慢等多種原因造成的。
然后,您可以要求DBA /服務器管理員進行檢查。
首先,您需要找出真正的問題
一旦確定它是數據庫查詢,它就更多地成為數據庫問題。
在分析了此問題之后,您應該能夠以不同的方式發布問題並期望得到答案。 我不是數據庫專家,但我敢肯定有人會提供一些指導。
必須進行調音:
TransactionScope.getConnection();
沒有任何延遲地建立連接。 而不是創建新的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];
這樣可以減少內存 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.