我是甲骨文的新手,我必须解决这个问题。
我有一张桌子,里面有大约 5.2 亿行。我必须获取所有行并将它们导入(非规范化)到 NoSQL 数据库中。
该表有两个整数字段 C_ID 和 A_ID 以及 3 个索引,一个在 C_ID 上,一个在 A_ID 上,一个在两个字段上。
我一开始就尝试过这种方式:
SELECT C_ID, A_ID FROM M_TABLE;
这从来没有在合理的时间内给我任何结果(我无法测量时间,因为它似乎永远不会完成)。
我以这种方式更改了查询:
SELECT /*+ ALL_ROWS */ C_ID, A_ID FROM (SELECT
rownum rn, C_ID, A_ID
FROM
M_TABLE WHERE rownum < ((:1 * :2 ) +1 )) WHERE rn >= (((:1 -1) * :2 ) +1 );
我使用 3 个线程并行运行此查询,并使用大小为 1000 的页面进行分页。
我尝试引入三个优化:
1)我在表格上创建了统计信息:
ANALYZE TABLE TABLE_M ESTIMATE STATISTICS SAMPLE 5 PERCENT;
2)我将表划分为 8 个分区。
3)我用并行选项创建了表。
现在我能够每秒获取 10000 行,因此整个过程大约需要 15 个小时才能完成(数据库在 4 核、8 GB 机器上运行)。
问题是我需要在最多 5 小时内完成所有工作。
我没有想法,所以在我要求新机器之前,你知道在这种情况下提高性能的任何方法。