String sql="select * from user where 2011-10";
ResultSet rs = jdbc.executeQuery(sb.toString());
String xml =null;
while(rs.next()){
xml=rs.getString("xml");
}我从数据库中读取xml文件,然后解析xml文件里边的内容,统计每个xml文件里的ID
但是如果有成千上万条记录的话,这句话(xml=rs.getString("xml");)效率太慢了。如何解决?
高手帮帮忙
PS:先不管解析的效率,就是读出xml文件时效率比较慢
觉得慢就不要用*号了 直接带出变量
还有where后面那是个什么?
String sql="select * from user t where t.create_time >to_timestamp('20100627111111','yyyymmddhh24missff3') and t.end_time <to_timestamp('20120630111111','yyyymmddhh24missff3')"
这句效率应该不慢啊我感觉这句是瓶颈jdbc.executeQuery(sb.toString());
你加个索引吧
不要 select * 你不就要一个字段么
xml=rs.getString("xml");
无关吧,有关的应该是XML文件,
从表中读取不都用这种方式吗?
或者
xml=rs.getString(1);
这种?
就这句慢
不是web项目 数据库是oracle
2、数据量多大呢?
3、xml=rs.getString("xml");改xml=rs.getString(1);或getString("xml");的xml设置为fina static所知道的就那么多了·呵呵
耗费多长时间计算过吗?
"xml"字段的数据量有多大?
xml数据量也不大 可能就是因为读取的xml文件 所以时间比较慢吧
<?xml version="1.0" encoding="UTF-8"?>
<ResponseData>
<ODRMSessionHistory id="1">
<ODRMSession componentName="physerver-vss01" ODSessionID="3c539b53-10e7-481e-809f-5aeaee9b3c7e" setupDate="20110525T015118.912" teardownDate="20110525T015253.252" ODRMIpAddr="80.3.210.110" SMIpAddr="80.3.230.2" sessionGroup="NGOD-TEST0" resultcode="200">
<PlayoutHistory time="20110525T015253.252">
<StreamResources ID="0" SOP="Boston.Pump1.1" filename="Boston.Pump.volume1A" providerID="provider1.com" assetID="STMV201105191851111" segmentNumber="1"/>
<EventHistory>
<StartStreamEvent time="20110525T015119.305" streamResourcesID="0" NPT="0.000" newState="PLAY" scale="1.000000"/>
<EndEvent time="20110525T015253.252" streamResourcesID="0" reason="USER" NPT="0.840" description="User stop" code="200"/>
</EventHistory>
</PlayoutHistory>
</ODRMSession>
</ODRMSessionHistory>
</ResponseData>
应该是你xml字段中的文本太大了。不过你还可以试试下面几种方案:
1、使用最新版本的JDBC驱动包;一般新版的驱动包都会对上一版本进行优化或Bug修改。
2、使用更高版本的JDK;理由同上。
3、加入缓存机制。如hibernate中的缓存。有第三方jar包,可以看看。当然这些都是治标不治本的。综合你上次的发贴,主要是数据库这块设计的不是很合理。
1,我觉得最根本的问题是 可能是因为读取xml文件造成的
2,不是web项目 所以没有用到SSH
用线程?
用线程将ResultSet 数据集分开查询 如1000条数据 分成四段 每段查询250条
最后将四段线程用join方法合并在一起?
只是有这个想法 不知是否可行 ! 如果可行 不知怎样实现?
是内存操作,应该不会很慢
1000多条,String类型,算一下xml字段的大约占多少字节,算一下可能消耗多少内存
Clob clob = rs.getClob("xml"); //这样会不会好一点,因为没有发生转换为String
BufferedReader br = new BufferedReader(clob.getCharacterStream());
String buf;
while ((buf=br.readLine()) != null) { //然后自己解析clob,读取xml每一行
//这里用正则提起你需要的信息
}
我的确实是多cpu 请问线程池可以实现这样的功能吗!