那你也就是通过 Java 代码对数据进行处理,而不是在数据库里做了 使用 select * from table 会造成你的内存溢出,那你可以一次获取一部分就 ok 了 我想这张表里的数据不至于是杂乱无章的吧,某个字段的值应该有一个取值范围的 你可以根据这个字段进行 where 查询,分批次的将数据获取出来,再进行单独处理
是不是内存不够大,增大内存试试 用这个命令,指定最小内存和最大内存可用量 java Test -Xms 512 -Xmx 1024
select t.* from (select *, rownum as rid from table order by col1) t where t.rid between 1 and 10000;这样每次就能取一万条数据
可以更简单些,SELECT * FROM TABLE rownum between 1 and 10000; 在程序里把那两个数字弄成变量即可: i=0; 进入循环,SELECT * FROM TABLE rownum between i and i+10000;
可以使用
cast ....when.....then....end就可以啦!
用分页,把比较大的数据放到内存里,当然是要防止可能出现OutofMemory的问题哟。
用JDBC 跑SQL 获得ResultSet,遍历ResultSet建立Document对象并用IndexWriter写入文件目录。
其中数据库中的一条记录对应Lucene中一个Document。
数据库表中都有唯一字段ID
使用 select * from table 会造成你的内存溢出,那你可以一次获取一部分就 ok 了
我想这张表里的数据不至于是杂乱无章的吧,某个字段的值应该有一个取值范围的
你可以根据这个字段进行 where 查询,分批次的将数据获取出来,再进行单独处理
用这个命令,指定最小内存和最大内存可用量
java Test -Xms 512 -Xmx 1024
where t.rid between 1 and 10000;这样每次就能取一万条数据
在程序里把那两个数字弄成变量即可:
i=0;
进入循环,SELECT * FROM TABLE rownum between i and i+10000;
1. rownum是不支持直接between的,只能小于
2. 每次查询的数据如不经排序都是随机的
可以用13楼的方法,但数据大时排序都是很大一成本。可以试试用ROWID排序
鄙视一下,between 是可以用的,我针对的是已经成列的 rid 又不是针对 rownum
个人认为一查就内存溢出,最终解决的方式还是硬件,如果硬没有达到要求就是现在这条语
查出来不错,我想速度也不会快到哪去。。