2012-09-20 25 views
10

Incluso después de leer mucho sobre el índice de texto completo de SQLite y surge la pregunta de que no vi respuestas en ninguna parte:¿La tabla virtual SQLite de texto completo se puede usar normalmente?

Ya tengo una tabla que quiero buscar con el índice de texto completo. Simplemente crearía una tabla virtual adicional USING FTS3 o USING FTS4 y luego INSERT mis datos en ella.

¿Eso utiliza el almacenamiento doble en total? ¿Puedo usar una tabla virtual como una tabla normal y así evitar almacenar los datos dos veces?

(Estoy trabajando con SQLite en Android pero esta cuestión puede aplicarse al uso en cualquier plataforma compatible con SQLite.)

Respuesta

10

pesar del hecho de que lo hicieron se encontraron algunos detalles Voy a tratar de dar respuesta detallada:

1. ¿Eso continuación, utilizar el doble de almacenamiento en total?

Sí lo hace. Además, podría usar el evento más espacio. Por ejemplo, para el ampliamente conocido Enron E-Mail base de datos y FTS3example, simplemente sentir la diferencia:

enter image description here

  • La tabla FTS3 consume alrededor de 2006 MB en el disco en comparación con sólo 1453 MB para la tabla ordinaria

  • La tabla FTS3 tomó poco menos de 31 minutos para rellenar, frente a 25 para la tabla ordinaria

Lo que hace la situación un poco desagradable, pero aún así búsqueda de texto completo pena.

2. ¿Puedo usar una tabla virtual como una tabla normal?

La respuesta corta no, no se puede.La tabla virtual es solo una especie de Ver con varias limitaciones. Ya has notado varios.

Generalmente diciendo que no debe usar ninguna función que parece no ser natural para un Ver. Solo un mínimo indispensable para permitir que su aplicación utilice al máximo el poder de la búsqueda de texto completo. Entonces no habrá sorpresas más adelante, con una versión más nueva del módulo.

No hay magia detrás de esta solución, es solo una compensación entre el rendimiento, el espacio en disco requerido y la funcionalidad.

Conclusión final

Yo recomendaría utilizar FTS4, porque es más rápido y el único inconveniente que se necesita espacio de almacenamiento adicional.

De todos modos, debe diseñar cuidadosamente la tabla virtual teniendo en cuenta la naturaleza complementaria y altamente especializada de dicha solución. En otras palabras, no intente reemplazar su tabla inicial con la tabla virtual. Use ambos con mucho cuidado.

Actualización Recomendaría mirar en el siguiente artículo: iOS full-text search with Core Data and SQLite. Varios momentos interesantes:

  • La tabla virtual se crea en la misma base de datos SQLite en wich el contenido básico de datos reside. Para mantener esta tabla lo más clara posible , se insertan solo las propiedades de objeto relevantes para la consulta de búsqueda.
  • La implementación SQLite ofrece algo que Core Data no: búsqueda de texto completo. Además de eso, realiza casi 10% más rápido y al menos 660% más (memoria) de manera eficiente que una consulta de Datos centrales comparables.
4

acabo de descubrir el main differences of virtual tables y parece depender de su uso ya sea una sola tabla es suficiente para tú.

  • No se puede crear un disparador en una tabla virtual.

  • No se pueden crear índices adicionales en una tabla virtual. (Tablas virtuales pueden tener índices, sino que debe ser incorporada en la tabla virtual aplicación. Los índices no se puede añadir por separado utilizando CREATE INDEX declaraciones.)

  • No se puede ejecutar ALTER TABLE ... añadir comandos COLUMNA contra una tabla virtual.

Así que si necesita otro índice sobre la mesa, es necesario utilizar dos tablas.

+0

@RenatGilmanov Creo que porque esto es más una respuesta? –

Cuestiones relacionadas