¿Cómo obtengo el mejor rendimiento con SQLite en Android?

He notado que hay varias maneras de hacer operaciones SQLite (consulta, insertar, actualizar, eliminar), y algunos pueden ser más rápidos que el resto. Muchos sitios web ofrecen consejos diferentes, y algunos conflictos con los demás.

  1. Parece que el uso de una transacción para el inserto masivo es de alguna manera más rápido que hacerlo en un bucle.

    ¿Cómo? ¿Cuál es la mejor manera de lograr el mejor rendimiento al usar SQLite? ¿Cómo funciona sqlite en Android?

  2. Confuso con el uso de InserHelper vs ContentValues , como se muestra aquí .

    ¿Cómo funciona el InserHelper y será siempre más rápido que ContentValues ? ¿La envoltura con una transacción acelerará aún más?

  3. Confusión en otros frameworks SQL. Recuerdo que la adición de índices aumentaría el rendimiento de las consultas relacionadas con los índices. ¿Esto es cierto para Android también? ¿Es esta una buena practica?

  4. He oído que en algunos casos, lo mejor es no usar el subproceso de interfaz de usuario para operaciones de base de datos. ¿En qué casos se recomienda esto? ¿Qué tan lenta podría ser la operación de DB? Si el DB se convierte en 70MB, ¿significa que será mucho más lento y el hilo de la interfaz de usuario nunca debe manejarlo?

¿Cómo?

Las transacciones implican E / S de disco. Es mucho menos costoso hacer un trozo más grande de E / S de disco que un montón de pequeños trozos de E / S de disco.

¿Cómo funciona el InserHelper y siempre será más rápido que contentValues?

Citando la documentación : "Esta clase permite a los usuarios realizar múltiples inserciones en una tabla, pero compilar la sentencia SQL sólo una vez, lo que puede aumentar el rendimiento".

Lo envolverá con una velocidad de transacción aún más?

Presumiblemente sí.

Es cierto para Android también?

Los índices pueden aumentar la velocidad de consulta, si crea los índices adecuados para las consultas que esté realizando. Los índices siempre disminuyen la velocidad de inserción / actualización / eliminación, ya que ahora es necesario actualizar esos índices. Esto no tiene nada que ver con Android.

Es es una buena cosa para usar?

Eso es imposible responder en abstracto. Esto no tiene nada que ver con Android.

Lo mejor es no usar el subproceso de interfaz de usuario para operaciones de base de datos

Correcto.

¿En qué casos se recomienda?

Nunca se recomienda realizar ninguna E / S de disco en el hilo de la aplicación principal.

¿Qué tan lenta podría ser la operación de DB?

Siglos. Probablemente para entonces, algo fallará en el dispositivo, o se quedará sin batería.

Si el DB se convierte en 70MB, significa que va a ser mucho más lento

Depende de lo que hagas con ella.

Y el hilo de la interfaz de usuario nunca debe manejarlo?

Correcto.

  • Android: transacciones SQLite al usar ContentResolver
  • ¿Las transacciones SQLite con ContentOrter de Google IO REST?
  • BeginTransaction (), endTransaction () y setTransactionSuccessful (). ¿Qué hacen exactamente?
  • ¿Debo usar siempre transacciones en android sqlite?
  • Las inserciones de SQLite se vuelven más lentas incluso con transacciones
  • ¿Está bien actualizar fragmentos en lugar de crear nuevas instancias?
  • SQLiteDatabase transacción anidada y solución alternativa
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.