Minha estimativa, observando que não sou um estatístico, é que a sobrecarga é algo como 8-12% Mais devagar.
Obtive os resultados usando 3 tabelas estruturalmente semelhantes e simples com duas colunas TEXT, executando 10.000 inserções por cada tabela, repetindo isso 5 vezes em 4 dispositivos.
Tabela 1 (coluna Dflt) foi criado com apenas as duas colunas de texto (utilizando assim o ROWID padrão).
Tabela 2 (coluna AI) foi criado usando
_id INTEGER PRIMARY KEY AUTOINCREMENT
além das duas colunas TEXT. Tabela 3 (sem coluna AI) foi criado usando
_id INTEGER PRIMARY KEY
além das duas colunas TEXT. Então Tabela 2 usa o algoritmo de seleção ROWID ligeiramente diferente para inserções.
Os quatro dispositivos utilizados foram:-
-
(1) Um dispositivo emulado Genymotion (Tablet personalizado - 5.1.0 - API 22 - 1536x2048)
-
(2) Um tablet Onix de 10" (AT101-1116)
-
(3) Um HTC 1 M8 (HTC_0PKV1)
-
(4) Um tablet Lenevo A10-30 (Lenovo TB2-X30F)
Os resultados que obtive foram:-
Os resultados são mais favoráveis quando tudo é executado em apenas 1 transação (ou seja,
beginTransaction();
antes de qualquer inserção, com setTransactionSuccessful();
e endTransaction();
após todas as inserções (para todas as tabelas, ou seja, todas as 150.000 inserções), por exemplo :- A comparação das duas tabelas destaca os benefícios que o uso de transações pode ter sobre o desempenho.