Учитывая, что база данных является «узким местом», а не работой, выполняемой потоками, выполнение всех вставок из разных потоков (с использованием индивидуального соединения) не повлияет на вашу производительность. Особенно, если вы делаете каждую вставку в новой транзакции. Каждый раз, когда транзакция фиксируется, база данных должна выполнять работу, чтобы обеспечить целостность данных. Это особенно плохо, поскольку все ваши транзакции будут конкурировать за внесение изменений в один и тот же объект.
Вместо того, чтобы использовать несколько потоков для ваших вставок, вы должны убедиться, что вы делаете все в одной транзакции и делаете коммит только тогда, когда все вставки сделаны.
BEGIN TRANSACTION;
INSERT INTO myTable (Col1, Col2) 'First' ,1;
INSERT INTO myTable (Col1, Col2) 'Second' ,2;
...
COMMIT;
N.B. - также возможно сделать все вставки в одной сцене, но это не влияет на производительность:
INSERT INTO myTable (Col1, Col2)
SELECT 'First' ,1
UNION ALL
SELECT 'Second' ,2
UNION ALL
SELECT 'Third' ,3;
По моему мнению, несколько вставок, сгруппированных в транзакции, гораздо проще. Кроме того, вторая версия может дать вложенный оператор, который слишком бит для обработки базой данных.