2012-12-26 10 views
8

Le manuel du développeur Android semble préférer FTS3 dans SQLite DB lorsque la recherche est nécessaire. J'ai lu la description de FTS3 et il apparaît qu'il crée une table virtuelle au lieu d'une table permanente. Quelle est la différence entre une table virtuelle (FTS3) et une table normale dans SQLite? La table virtuelle est-elle permanente et reste dans la base de données même après avoir quitté l'application? Je vous remercie.Table normale vs table virtuelle SQLite DB

Répondre

5

Une table virtuelle permet au moteur SQLite d'accéder au contenu d'un magasin de données à l'aide d'un code (généralement) non SQLite. Cela permet au développeur d'ajouter des fonctionnalités personnalisées à SQLite.

Dans le cas de FTS, il ne faisait à l'origine pas partie du moteur SQLite. C'était un code externe à SQLite, qui permettait à l'utilisateur final de faire une recherche en texte intégral sur les données.

Une table virtuelle est-elle permanente? Cela dépend de l'implémentation. Pour FTS, les données sont permanentes. Cependant, vous pouvez créer une implémentation qui utilise la RAM pour le stockage - cela disparaîtra évidemment lorsque l'application sera terminée.

Plus sur les tables virtuelles: http://www.sqlite.org/vtab.html

0

Je pense qu'il est plus exact de dire que le guide de l'API pour la création d'une interface de recherche fait remarquer que FTS3 ne recherche en texte intégral beaucoup plus rapide que LIKE, en fonction des caractéristiques du recherche. Par exemple, une requête SQLite régulière utilisant LIKE autorise les caractères génériques, contrairement à une requête FTS3 utilisant MATCH. Si vous voulez rechercher des jetons, vous pouvez vouloir aller avec FTS3. Si vous faites un match imprécis, vous devez absolument y aller avec LIKE.

+0

Je pense que les caractères génériques sont également autorisés lors de l'utilisation de MATCH. Vous avez juste besoin de mettre * basé sur ce que j'ai lu sur le site SQLite. – androidnerd