我需要從一個龐大的數據表(可能包含500萬條記錄)創建一些文件與我自己的格式(讓每個5000 recs)。我希望這個創作是多線程的。查詢從一個巨大的數據表批量獲取數據
那麼,如何有效地形成查詢來獲取1..5000和5001..10000等記錄。
我可以形成一些東西,如select *從表rownum < 5000而不存在(已獲取記錄)。但它不是有效的。
請建議形成查詢或任何其他方法來創建文件的最佳方式。
我需要從一個龐大的數據表(可能包含500萬條記錄)創建一些文件與我自己的格式(讓每個5000 recs)。我希望這個創作是多線程的。查詢從一個巨大的數據表批量獲取數據
那麼,如何有效地形成查詢來獲取1..5000和5001..10000等記錄。
我可以形成一些東西,如select *從表rownum < 5000而不存在(已獲取記錄)。但它不是有效的。
請建議形成查詢或任何其他方法來創建文件的最佳方式。
如果您使用的是Oracle 11g,則可以使用DBMS_PARALLEL_EXECUTE包在多個線程中運行您的過程。 Find out more。
如果您使用的是早期版本,則可以使用Tom Kyte的技術實現DIY並行。 Hungry DBA提供a good explanation on his blog here。
聽起來你需要一組使用MySql LIMIT
子句來實現分頁的查詢(例如,查詢將獲得前1000個,另一個將獲得第二個1000等)。
您可以形成這些查詢並將其作爲Callables
提交給帶有一定數量的線程的Executor service。 Executor
將管理這些線程。我懷疑在每個Callable
內查詢和寫入記錄可能會更有效率,但這是一個可能需要測試的假設。
MySQL? 15個炭灰墊 – Ben
看看這個:http://use-the-index-luke.com/sql/partial-results –
每個文件都必須有相同數量的行嗎?就好像它不重要一樣,你可以將表分成ROWID範圍,然後每個線程只會使用'where A到B之間的rowid'。 – DazzaL
您是否在討論創建1,000個文件?你需要將所有的行寫入文件嗎? –