android - primary - sqlite_sequence table



Quais são as despesas gerais do uso do AUTOINCREMENT para SQLite no Android? (1)

Minha estimativa, observando que eu não sou um estatístico, é que a sobrecarga é algo como 8-12% mais lenta.

Eu obtive os resultados usando 3 tabelas estruturalmente similares e simples com duas colunas TEXT, executando 10.000 inserções por tabela, repetindo isso 5 vezes em 4 dispositivos.

A Tabela 1 (coluna Dflt) foi criada apenas com as duas colunas TEXT (assim utilizando o ROWID padrão).

A Tabela 2 (coluna AI) foi criada usando _id INTEGER PRIMARY KEY AUTOINCREMENT , além das duas colunas TEXT.

A Tabela 3 (Nenhuma coluna AI) foi criada usando _id INTEGER PRIMARY KEY além das duas colunas TEXT.

Portanto, a Tabela 2 usa o algoritmo de seleção ROWID ligeiramente diferente para inserções.

Os quatro dispositivos utilizados foram: -

  • (1) Um dispositivo emulado Genymotion (Custom Tablet - 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 (ie beginTransaction(); antes de qualquer inserção, com setTransactionSuccessful(); e endTransaction(); depois de 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 no desempenho.

Na documentação do SQLite, inclui o seguinte:

A palavra-chave AUTOINCREMENT impõe CPU extra, memória, espaço em disco e sobrecarga de E / S de disco e deve ser evitada se não for estritamente necessária. Geralmente não é necessário.

e

O comportamento implementado pela palavra-chave AUTOINCREMENT é sutilmente diferente do comportamento padrão. Com AUTOINCREMENT, as linhas com ROWIDs automaticamente selecionados têm a garantia de que os ROWIDs nunca foram usados ​​antes pela mesma tabela no mesmo banco de dados. E os ROWIDs gerados automaticamente garantem um aumento monótono. Estas são propriedades importantes em certas aplicações. Mas se o seu aplicativo não precisar dessas propriedades, provavelmente você deve permanecer com o comportamento padrão, pois o uso de AUTOINCREMENT requer que o trabalho adicional seja feito à medida que cada linha é inserida e, portanto, faz com que os INSERTs sejam executados um pouco mais devagar.

As citações acima são do Autoincremento do SQLite

Então, que tipo de impacto é esperado e por quanto o AUTOINCREMENT é um pouco mais lento?





auto-increment