我该如何改进搜索功能?我写了一些代码来搜索某些东西。搜索花费了太多时间。和代码片段在这里,改善搜索功能
我从数据库中使用这种方法把数据,
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
你可以做的一件事是在数据库中使用存储过程,因此它可以优化和存储实现它的最佳方式,而不需要每次重新计算它。 – Patashu 2013-03-25 04:12:56
@Patashu,这是一个准备好的声明也是如此。这是需要很长时间的查询吗?如果是这样,发布代码将无济于事,您需要查看是否可以优化查询,例如检查丢失的索引等。 – Blake 2013-03-25 04:17:37
验证“TransactionScope.getConnection();'是否在每次调用时都不创建连接,因为它会降低方法性能。如果它正在重用连接/池,则发布SQL,以便您可以建议重构/改进它 – 2013-03-25 04:19:16