La mia stima, notando che non sono uno statistico, è che le spese generali siano qualcosa come 8-12% più lento.
Ho ottenuto i risultati utilizzando 3 tabelle strutturalmente simili e semplici con due colonne TEXT, con 10.000 inserti per ogni tabella, ripetendo 5 volte su 4 dispositivi.
Tabella 1 (colonna Dflt) è stato creato con solo le due colonne TEXT (utilizzando quindi il ROWID predefinito).
Tabella 2 (colonna AI) è stato creato utilizzando _id INTEGER PRIMARY KEY AUTOINCREMENT
oltre alle due colonne TESTO.
Tabella 3 (nessuna colonna AI) è stato creato utilizzando _id INTEGER PRIMARY KEY
oltre alle due colonne TESTO.
Quindi Tabella 2 utilizza l'algoritmo di selezione ROWID leggermente diverso per gli inserti.
I quattro dispositivi utilizzati erano :-
-
(1) Un dispositivo emulato Genymotion (tablet personalizzato - 5.1.0 - API 22 - 1536x2048)
-
(2) Un tablet Onix da 10" (AT101-1116)
-
(3) Un HTC 1 M8 (HTC_0PKV1)
-
(4) Un tablet Lenevo A10-30 (Lenovo TB2-X30F)
I risultati che ho ottenuto sono stati :-
I risultati sono più favorevoli quando tutto viene eseguito in una sola transazione (ad esempio beginTransaction();
prima di qualsiasi inserimento, con setTransactionSuccessful();
e endTransaction();
dopo tutti gli inserti (per tutte le tabelle cioè gli interi 150.000 inserti), ad es. :-
Confronto delle due tabelle, evidenzia i vantaggi che l'utilizzo delle transazioni può avere sulla performance.