2013-01-03 48 views
1

我需要從一個龐大的數據表(可能包含500萬條記錄)創建一些文件與我自己的格式(讓每個5000 recs)。我希望這個創作是多線程的。查詢從一個巨大的數據表批量獲取數據

那麼,如何有效地形成查詢來獲取1..5000和5001..10000等記錄。

我可以形成一些東西,如select *從表rownum < 5000而不存在(已獲取記錄)。但它不是有效的。

請建議形成查詢或任何其他方法來創建文件的最佳方式。

+2

看看這個:http://use-the-index-luke.com/sql/partial-results –

+0

每個文件都必須有相同數量的行嗎?就好像它不重要一樣,你可以將表分成ROWID範圍,然後每個線程只會使用'where A到B之間的rowid'。 – DazzaL

+0

您是否在討論創建1,000個文件?你需要將所有的行寫入文件嗎? –

回答

1

如果您使用的是Oracle 11g,則可以使用DBMS_PARALLEL_EXECUTE包在多個線程中運行您的過程。 Find out more

如果您使用的是早期版本,則可以使用Tom Kyte的技術實現DIY並行。 Hungry DBA提供a good explanation on his blog here

0

聽起來你需要一組使用MySql LIMIT子句來實現分頁的查詢(例如,查詢將獲得前1000個,另一個將獲得第二個1000等)。

您可以形成這些查詢並將其作爲Callables提交給帶有一定數量的線程的Executor serviceExecutor將管理這些線程。我懷疑在每個Callable內查詢和寫入記錄可能會更有效率,但這是一個可能需要測試的假設。

+0

MySQL? 15個炭灰墊 – Ben

相關問題