我正在使用SQL Server 2008和Java 6/Spring jdbc。將長時間運行的SQL查詢拆分爲多個較小的查詢
我們有一張表,記錄數約爲60mn。我們需要將這整個表加載到內存中,但是在這個表上觸發select *需要幾小時才能完成。
因此,我將查詢如下
String query = " select * from TABLE where " ;
for(int i =0;i<10;i++){
StringBuilder builder = new StringBuilder(query).append(" (sk_table_id % 10) =").append(i);
service.submit(new ParallelCacheBuilder(builder.toString(),namedParameters,jdbcTemplate));
}
基本上,我通過添加對主鍵列a,其中條件分裂查詢,
上面的代碼片斷拆分查詢分成10個查詢運行在parallel.this使用java的ExecutorCompletionService。
我不是SQL專家,但我想上面的查詢將需要加載之前在主列上applyinh模運算符加載相同的數據。
這是好/壞/最好/最壞的方式?有沒有其他的方式,請發佈。
在此先感謝!
我認爲將整個數據加載到內存是一個糟糕的主意。你應該考慮使用存儲過程! – CoderHawk 2011-05-09 06:27:28
@Sandy我同意,但程序如何幫助減少時間,請你指導一下? – blob 2011-05-09 06:37:35
爲什麼你需要加載所有記錄?爲什麼需要幾個小時?我會檢查獲取大小,並檢查查詢是如何執行的。 – Kaj 2011-05-09 06:37:38