vBulletin Search Engine Optimization
| |||||||
| Register | FAQ | Members List | Calendar | Search | Today's Posts | Mark Forums Read |
| ||||
| Hi, I have a java.util.List of values (10000) which i wanted to use for a query in the where clause of an simple select statement. iterating over the list and and use an prepared Statement is quite slow. Is there a more efficient way to execute such a query. Thanks for any help. Johannes ...... List ids = new ArrayList(); ..... List is filled with 10000 values ... List uuids = new ArrayList(); PreparedStatement pstat = db.prepareStatement("SELECT UUID FROM MDM.KEYWORDS_INFO WHERE KEYWORDS_ID = ?"); for (Iterator iter = ids.iterator(); iter.hasNext() String id = (String) iter.next(); pstat.setString(1, id); rs = pstat.executeQuery(); if (rs.next()) { uuids.add(rs.getString(1)); } rs.close(); } .... ---------------------------(end of broadcast)--------------------------- TIP 6: explain analyze is your friend |
| |||
| The problem is you are getting the entire list back at once. You may want to try using a cursor. Dave On 15-Dec-05, at 9:44 AM, johannesbuehler@oderbruecke.de wrote: > Hi, > I have a java.util.List of values (10000) which i wanted to use for > a query in the where clause of an simple select statement. > iterating over the list and and use an prepared Statement is quite > slow. Is there a more efficient way to execute such a query. > > Thanks for any help. > Johannes > ..... > List ids = new ArrayList(); > > .... List is filled with 10000 values ... > > List uuids = new ArrayList(); > PreparedStatement pstat = db.prepareStatement("SELECT UUID FROM > MDM.KEYWORDS_INFO WHERE KEYWORDS_ID = ?"); > for (Iterator iter = ids.iterator(); iter.hasNext() > String id = (String) iter.next(); > pstat.setString(1, id); > rs = pstat.executeQuery(); > if (rs.next()) { > uuids.add(rs.getString(1)); > } > rs.close(); > } > ... > > > > > > > ---------------------------(end of > broadcast)--------------------------- > TIP 6: explain analyze is your friend > ---------------------------(end of broadcast)--------------------------- TIP 3: Have you checked our extensive FAQ? http://www.postgresql.org/docs/faq |
| ||||
| Is there a reason you can't rewrite your SELECT like: SELECT UUID FROM MDM.KEYWORDS_INFO WHERE KEYWORDS_ID IN (a, b, c, d) Even doing them 100 at a time will make a big difference; you should put as many in the list as pgsql supports. I'm assuming that there's an index over KEYWORDS_ID. Retrieving 10000 rows with 10000 statements is generally a Bad Idea. S At 08:17 AM 12/22/2005, Dave Cramer wrote: >The problem is you are getting the entire list back at once. > >You may want to try using a cursor. > >Dave >On 15-Dec-05, at 9:44 AM, johannesbuehler@oderbruecke.de wrote: > >>Hi, >>I have a java.util.List of values (10000) which i wanted to use for >>a query in the where clause of an simple select statement. >>iterating over the list and and use an prepared Statement is quite >>slow. Is there a more efficient way to execute such a query. >> >>Thanks for any help. >>Johannes >>..... >>List ids = new ArrayList(); >> >>.... List is filled with 10000 values ... >> >>List uuids = new ArrayList(); >>PreparedStatement pstat = db.prepareStatement("SELECT UUID FROM >>MDM.KEYWORDS_INFO WHERE KEYWORDS_ID = ?"); >>for (Iterator iter = ids.iterator(); iter.hasNext() >>String id = (String) iter.next(); >>pstat.setString(1, id); >>rs = pstat.executeQuery(); >>if (rs.next()) { >>uuids.add(rs.getString(1)); >>} >>rs.close(); >>} >>... >> >> >> >> >> >> >>---------------------------(end of >>broadcast)--------------------------- >>TIP 6: explain analyze is your friend > > >---------------------------(end of broadcast)--------------------------- >TIP 3: Have you checked our extensive FAQ? > > http://www.postgresql.org/docs/faq ---------------------------(end of broadcast)--------------------------- TIP 6: explain analyze is your friend |