最近工作做了一个优化:一个数据表有几百万甚至千万条的记录,符合条件的也有十几万条,要取出来出到excel里做报表,原来是一次性读取到一个sheet,直到一个sheet放不下系统出错,才开始修正这个问题。
我首先想到的是分页(分sheet)显示数据,于是读取的话也分页读取,而不是一次性读取出来,然后拆分结果集。实现之后一个最佳效率的问题自然而然的就产生了,oracle分页,每页大小多少最佳?(现在是65536,也就是excel2003的最大值)。也就是如果只考虑查询速度,在最短的时间内查出所有的值,每页到底该有多大?首先我感觉一次性读取全部内容效率应该不是最高的(直观感觉),另一种极端情况,一页一条记录,读取十几万次应该也不是最好的,所有中间比应该有个最优值,这个值该怎么算?谁研究过?
我首先想到的是分页(分sheet)显示数据,于是读取的话也分页读取,而不是一次性读取出来,然后拆分结果集。实现之后一个最佳效率的问题自然而然的就产生了,oracle分页,每页大小多少最佳?(现在是65536,也就是excel2003的最大值)。也就是如果只考虑查询速度,在最短的时间内查出所有的值,每页到底该有多大?首先我感觉一次性读取全部内容效率应该不是最高的(直观感觉),另一种极端情况,一页一条记录,读取十几万次应该也不是最好的,所有中间比应该有个最优值,这个值该怎么算?谁研究过?
或者分到每页65536,好像EXCEL表行数最大是65536。
SELECT * FROM
(
SELECT A.*, ROWNUM RN
FROM (SELECT * FROM TABLE_NAME) A
WHERE ROWNUM <= 40
)
WHERE RN >= 21
我的sql是类似这样的。 SELECT * FROM TABLE_NAME 是最终的查询语句 。。
没用啥框架,就是JDBC直接跑sql
shell+ sqlload
建表索引和分区都加上,导入很快
导出的话,csv不行么?
我们纯java,怎么调shell没搞过,不过csv确实不行,客户有些确实会看。csv的没格式。。