我正在使用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