¿Qué es mejor en términos de performance de sqlite3: eliminar fila innecesaria o configurarla como no necesaria?

Estoy escribiendo una aplicación de iPhone donde el usuario recibe múltiples posts de diferentes usuarios. Estos posts se almacenan en una database sqlite3. Con el time, al usuario le gustaría eliminar los posts recibidos de un usuario, pero seguro que continuará recibiendo nuevos posts de ese usuario después de eliminar los anteriores.

Dado que la recuperación de los posts se realizará mediante una instrucción SELECT , qué escenario es mejor usar cuando el usuario desea eliminar los posts (en términos de performance):

  1. DELETE todos los posts antiguos normalmente y continúe recuperando los nuevos utilizando una instrucción como: SELECT Messages FROM TableName WHERE UserID = (?)
  2. Agregue un campo a la tabla de tipo INTEGER y, luego de la request DELETE establezca este campo en 1 y luego recupere los posts nuevos usando una instrucción como: SELECT Messages FROM TableName WHERE UserID = (?) AND IsDeleted = 0

Una cosa más, si se usa el escenario 1 ( DELETE normal), ¿causará alguna fragmentación del file de la database en el disco?

Muchas gracias de antemano.

El uso del escenario 1 es mucho mejor, ya que tanto SELECT como DELETE en SQL funcionan al mismo nivel de velocidad y el escenario 1 le otorgará que no tenga tuplas colgadas (filas no deseadas) en su database.

Si desea realizar una copy de security de datos después de cualquier process de eliminación, el escenario 2 es obligatorio, pero debe tener en count el tamaño cada vez mayor de su database, lo que conduce a un performance más lento en el futuro.

Finalmente, quisiera agregar que realizar operaciones de eliminación en una database no causaría problemas de fragmentación ya que la mayoría de las bases de datos tienen herramientas de fragmentación y optimization en sus motores.

Sería una database muy mala si DELETE no funcionaba bien. A falta de evidencia en contrario, supongo que está seguro de eliminarlo como es normal. Toda la razón de ser de la database es hacer que este tipo de operaciones sea eficiente.

En mi humilde opinión, si no usa ELIMINAR, después de un time, la database será cada vez más grande, haciendo cada SELECCIONAR cada vez less eficiente. por lo tanto, creo que eliminar filas que nunca se volverán a usar es más eficiente.