Il commit automatico viene disabilitato prima del batch perché l'abilitazione del commit automatico si impegna (ovvero, attendere che la sincronizzazione si verifichi, il che significa che attenderà che i dati vengano effettivamente scritti nella memoria persistente come il disco rigido) dopo ogni riga inserita.
Se il commit automatico è falso, non attenderà la sincronizzazione.
La differenza nell'attesa di sincronizzazione e non attesa è la garanzia che i dati siano effettivamente sul disco rigido o nel buffer (che potrebbe essere bufferato IO o buffer di disco rigido).
In breve, la disattivazione del commit automatico offre un miglioramento delle prestazioni. E penso che il commit automatico di default sia abilitato.
Un altro modo di ottimizzazione
Se si desidera avere commit automatico su ON e ancora bisogno di aumentare le prestazioni solo cercare di iniziare come transazione prima l'operazione di travaso e il commit della transazione dopo. In questo modo sqlite non eseguirà il commit automatico dopo ogni inserimento e darà un buon incremento delle prestazioni.
EDIT:
Quando si iniziare una transazione che si sta solo disattivazione di Auto commettere per tale operazione e sarà di nuovo 'on', una volta transazione è finita. L'ausilio del commit automatico è quando si inseriscono/aggiornano le righe separatamente (non come batch), quindi non è necessario avviare una transazione esplicitamente per ogni inserimento/aggiornamento. E per quanto riguarda l'impostazione del commit automatico su true, dopo il fatto , non richiede il commit. Se esegui il commit automatico true e tutto ciò che hai già inserito/aggiornato non avrà alcun effetto e non avrà le stesse garanzie come vero commit automatico prima di eseguire tali inserimenti/aggiornamenti.
Here's some information about speeding up Sqlite INSERTs.
Ho aggiunto una risposta a ciò che contraddice alcune delle informazioni nella risposta accettata. FYI. – Gray