Я использую SQL Server 2008 и Java 6 / Spring jdbc.
У нас есть таблица с количеством записей ~ 60 млн.
Нам нужно загрузить всю эту таблицу в память, но выполнение выбора * в этой таблице занимает часы.
Итак, я делю запрос, как показано ниже
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));
}
В основном я делю запрос, добавляя условие where в столбец первичного ключа,
приведенный выше фрагмент кода разбивает запрос на 10 параллельных запросов. При этом используется Java ExecutorCompletionService .
.
Я не эксперт по SQL, но я полагаю, что вышеупомянутые запросы должны будут загрузить те же данные в память, прежде чем применять оператор по модулю к первичному столбцу.
Это хорошо / плохо / лучше / хуже? Есть ли другой способ, пожалуйста, напишите.
Заранее спасибо !!!