SQLite
 sql >> Base de Dados >  >> RDS >> SQLite

Quais são as despesas gerais do uso de AUTOINCREMENT para SQLite no Android?


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.