Oracle千万级分组数据分块查询方案咨询(避免全量读取)
分块查询优化需求
我们需要将实体按组存储,每组约含1000万条实体。因单次查询需获取数百万条实体的操作不被允许,现寻求分块查询方案,使每次查询仅获取约1000条记录,无需访问全量数据。
示例表结构
| ID | GROUP_ID | DATA | IS_ACTIVE | ....... | TIME_CREATED | TIME_UPDATED |
|---|---|---|---|---|---|---|
| 1 | 101 | 1 | ....... | 1212 | 1212 | |
| 2 | 101 | 1 | ....... | 1212 | 1212 | |
| ..... | ... | ...... | . | ....... | .... | .... |
| 7897897 | 101 | 1 | ....... | 1616 | 1616 |
曾提出的分块查询SQL
select trunc(rn/1000) chunk_id, group_id, min(id) as startKey, max(id) as endKey, count(1) as chunk_count from ( select group_id, id, rownum as rn from ( select group_id, id from entity_data where group_id = '101' order by id ) ) group by trunc(rn/1000), group_id order by 1
该方案因需访问全量记录计算分块,且受Oracle内存限制被否决。
补充说明
我们使用的数据库为多用户共享模式,数据量持续增长。当执行特定查询时,需从约1亿条总数据中提取500-1000万条记录,单次查询数据量达3-5GB,会导致数据库性能下降并影响其他用户,因此需优化数据获取方式。
内容的提问来源于stack exchange,提问作者Rishabh Goel
相关产品推荐
相关产品推荐

