Rendimiento del inserto con python y sqlite3.

Estoy haciendo grandes inserciones por lotes en una base de datos SQLite3 y estoy tratando de tener una idea de qué tipo de rendimiento debo esperar frente a lo que realmente estoy viendo.

Mi mesa se ve así:

cursor.execute( "CREATE TABLE tweets( tweet_hash TEXT PRIMARY KEY ON CONFLICT REPLACE, tweet_id INTEGER, tweet_text TEXT)" ) 

y mis inserciones se ven así:

 cursor.executemany("INSERT INTO tweets VALUES (?, ?, ?)", to_write) 

donde to_write es una lista de tuplas.

Actualmente, con aproximadamente 12 millones de filas en la base de datos, insertar 50 000 filas me está demorando alrededor de 16 minutos, ejecutándose en un macbook 2008.

¿Esto suena razonable, o está sucediendo algo grave?

Según tengo entendido, la razón principal del mal desempeño es el tiempo que pierde para cometer muchas transacciones SQLite. ¿Qué hacer?

Suelte los índices, luego

 PRAGMA synchronous = OFF (or NORMAL) 

Inserte bloques de N filas (defina N, intente N = 5000 para comenzar). Antes de insertar bloque hacer

 BEGIN TRANSACTION 

después de insertar hacer

 COMMIT 

Véase también http://www.sqlite.org/faq.html#q19