Темы не путь. База данных является узким местом здесь. Несколько потоков будут только увеличить конкуренция. Даже если 10 процессов затирают данные в SQL Server, один поток (а не многие) может извлечь их быстрее. В этом нет абсолютно никаких сомнений.
Сам SELECT может вызвать блокировки в основной таблице, уменьшая пропускную способность INSERT, поэтому я бы "входил и выходил" как можно быстрее. Если бы это был я, я бы:
- ВЫБЕРИТЕ строки на основе запроса диапазона (дата, recno, что угодно), выведите их в файл и закройте результирующий набор (курсор).
- УДАЛИТЬ строки на основе одного и того же запроса диапазона.
- Затем обработать дамп. Если возможно, формат дампа должен быть доступен для массовой загрузки в MySQL.
Я не хочу бить вашу архитектуру, но в целом дизайн звучит проблематично. ВЫБОР И УДАЛЕНИЕ строк из таблицы, подвергающейся высокой скорости ВСТАВЛЕНИЯ, создаст огромные проблемы с блокировкой. Я хотел бы посмотреть на «двойную буферизацию» данных в SQL Server.
Например, каждую минуту вставки переключаются между двумя таблицами. Например, в первую минуту INSERT переходят в TABLE_1, но когда минута переворачивается, они начинают INSERT в TABLE_2, на следующей минуте возвращаются в TABLE_1 и так далее. Пока INSERTS входят в TABLE_2, ВЫБЕРИТЕ все из TABLE_1 и сбросьте его в MySQL (настолько эффективно, насколько это возможно), затем TRUNCATE таблицы (удалив все строки с нулевым штрафом). Таким образом, между читателями и писателями никогда не будет раздоров.
Координация точки прокрутки между TABLE_1 и TABLE_2 - сложная часть. Но это можно сделать автоматически с помощью умного использования многораздельных представлений SQL Server.